Các mã saulỗi trong trình biên dịch thực hoặc trong javac ("thông số loại T không thể được xác định")
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();
}
}
biên dịch trong nhật thực, nhưng không phải với javac (thông số loại T không thể được xác định, không có độc đáo trường hợp tối đa tồn tại cho biến kiểu T với giới hạn trên T, java.lang.Object).
Khi tôi thay đổi readObject (String file) để
@SuppressWarnings("unchecked")
public static <T> T readObject(String file) throws Exception {
return (T)readObject(new ObjectInputStream(new FileInputStream(file)));
}
nó biên dịch trong nhật thực và với javac. Ai là đúng, trình biên dịch eclipse hoặc javac?
return GenericsTest2. readObject (new ObjectInputStream (tệp FileInputStream mới); làm việc. Cảm ơn! –
Tôi không đồng ý, nó trông giống như lỗi liên quan bên dưới. Trình biên dịch nên tin tưởng một diễn viên rõ ràng mà không suy luận kiểu - các biên dịch sau đây phạt tiền @SuppressWarnings ("không được kiểm tra") public static T createT (String className) ném ngoại lệ { return (T) Class.forName (className) .newInstance(); } –