Java泛型:为什么编译器不能告诉这个Class <t>对象与该类的类型参数的对象类具有相同的类型?

时间:2016-06-14 20:15:26

标签: java generics

为什么我需要将obj.getClass()的返回强制转换为Class&lt; T&gt;当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 个答案:

答案 0 :(得分:-1)

简单地说,这是因为getClass方法返回Class<?>,无论对象实际是什么类型。即使类型Class<?>的引用在本例中指向类型为Class<T>的对象,方法签名也将返回类型定义为Class<?>,因此编译器就是期待回来。

对于编译器,您正在向Class<?>转换Class<T>,并标记警告,因为无法确保仅通过返回类型,情况确实如此。