Java泛型:为什么编译器不能判断这个类<t>对象与这个类的类型参数的对象的类具有相同的类型?
为什么我需要投出obj的回归。getClass()到一个类<;T>;什么时候obj有T型?这也会产生一个警告,我已经沉默了。但我觉得这没必要。这是怎么回事
public class DataSerialization<T> {
private T deserializedObject;
private Class<T> classObject;
private String serializedObject = null;
private static final Gson gson = new Gson();
@SuppressWarnings("unchecked")
public DataSerialization(T obj) {
this.deserializedObject = obj;
this.classObject = (Class<T>) obj.getClass();
}
// ...
}
# 1 楼答案
简单地说,这是因为
getClass
方法返回Class<?>
,不管对象实际上是什么类型的类。在本例中,尽管类型Class<?>
的引用指向类型Class<T>
的对象,但方法签名将返回类型定义为Class<?>
,因此编译器希望返回这种类型对于编译器来说,您正在将一个
Class<?>
强制转换为一个Class<T>
,这会标记一个警告,因为无法仅通过返回类型来确保这种情况