Der folgende CodeBug in Eclipse-Compiler oder in Javac
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();
}
}
kompiliert in Eclipse, aber nicht mit Javac (Typ-Parameter von T nicht bestimmt werden kann ("Typ-Parameter von T nicht bestimmt werden kann"); keine eindeutige Die maximale Instanz existiert für die Typvariable T mit den oberen Grenzen T, java.lang.Object).
Wenn ich readObject- (String-Datei)
@SuppressWarnings("unchecked")
public static <T> T readObject(String file) throws Exception {
return (T)readObject(new ObjectInputStream(new FileInputStream(file)));
}
ändern kompiliert es in Eclipse und mit javac. Wer ist richtig, der Eclipse-Compiler oder Javac?
return GenericsTest2. readObject (neuer ObjectInputStream (neuer FileInputStream (Datei))); funktioniert. Vielen Dank! –
Ich stimme nicht zu, es sieht eher aus wie der unten beschriebene Fehler. Der Compiler sollte eine explizite Umwandlung ohne Typinferenz vertrauen - die folgenden kompiliert feinen @SuppressWarnings ("ungeprüft") public static T createT (String classname) throws Exception { return (T) Class.forName (classname) .newInstance(); } –