有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    简单地说,这是因为getClass方法返回Class<?>,不管对象实际上是什么类型的类。在本例中,尽管类型Class<?>的引用指向类型Class<T>的对象,但方法签名将返回类型定义为Class<?>,因此编译器希望返回这种类型

    对于编译器来说,您正在将一个Class<?>强制转换为一个Class<T>,这会标记一个警告,因为无法仅通过返回类型来确保这种情况