为什么我需要将obj.getClass()的返回强制转换为Class< 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();
}
// ...
}
答案 0 :(得分:-1)
简单地说,这是因为getClass
方法返回Class<?>
,无论对象实际是什么类型。即使类型Class<?>
的引用在本例中指向类型为Class<T>
的对象,方法签名也将返回类型定义为Class<?>
,因此编译器就是期待回来。
对于编译器,您正在向Class<?>
转换Class<T>
,并标记警告,因为无法确保仅通过返回类型,情况确实如此。