Наступний код
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 (параметри типу T визначити неможливо; не існує унікального максимального екземпляра для змінної типу T з верхніми межами T, java.lang.Object).
Коли я зміню readObject (String файл) на
@SuppressWarnings("unchecked")
public static <T> T readObject(String file) throws Exception {
return (T)readObject(new ObjectInputStream(new FileInputStream(file)));
}
він складається в затемненні і за допомогою javac. Хто правильний, компілятор затемнення чи javac?