निम्नलिखित कोडबग ("टी के प्रकार के मापदंडों का निर्धारण नहीं किया जा सकता है")
public class GenericsTest2 {
public static void main(String[] args) throws Exception {
Integer i = readObject(args[0]);
System.out.println(i);
}
public static <T> T readObject(String file) throws Exception {
return readObject(new ObjectInputStream(new FileInputStream(file)));
// closing the stream in finally removed to get a small example
}
@SuppressWarnings("unchecked")
public static <T> T readObject(ObjectInputStream stream) throws Exception {
return (T)stream.readObject();
}
}
ग्रहण में संकलित है, लेकिन javac (टी के प्रकार के पैरामीटर निर्धारित नहीं किया जा सकता है के साथ नहीं, कोई अनोखी ऊपरी सीमा टी, java.lang.Object) के साथ प्रकार परिवर्तनीय टी के लिए अधिकतम उदाहरण मौजूद है।
जब मैं
@SuppressWarnings("unchecked")
public static <T> T readObject(String file) throws Exception {
return (T)readObject(new ObjectInputStream(new FileInputStream(file)));
}
को readObject (स्ट्रिंग फ़ाइल) को बदलने के लिए यह ग्रहण में और javac के साथ संकलित करता है। कौन सही है, ग्रहण कंपाइलर या जावैक?
वापसी जेनिक्सटेस्ट 2। readObject (नया ऑब्जेक्ट इनपुटपुट (नई फ़ाइल इनपुटस्ट्रीम (फ़ाइल))); काम करेगा। धन्यवाद! –
मैं असहमत हूं, यह नीचे संबंधित बग की तरह दिखता है। संकलक बिना प्रकार निष्कर्ष एक स्पष्ट कलाकारों पर भरोसा करना चाहिए - निम्नलिखित ठीक @SuppressWarnings संकलित ("अनियंत्रित") सार्वजनिक स्थिर टी createT (स्ट्रिंग className) फेंकता अपवाद { वापसी (टी) Class.forName (className) .newInstance(); } –