Java 为什么在删除类型后保存信息?

Java 为什么在删除类型后保存信息?,java,generics,type-erasure,Java,Generics,Type Erasure,正如预期的那样,输出是String。如果发生类型擦除,为什么要保存类型信息?如果我理解正确,输出应该是对象 出于与此相同的原因: class Generic<T> { void method(T t) { print(t.getClass().getSimpleName()); } } public class Program { static public void main(String[] args) { Generic&

正如预期的那样,输出是String。如果发生类型擦除,为什么要保存类型信息?如果我理解正确,输出应该是对象

出于与此相同的原因:

class Generic<T> {
    void method(T t) {
        print(t.getClass().getSimpleName());
    }
}
public class Program {
    static public void main(String[] args) {
        Generic<String> g = new Generic1<>();
        g.method(new String());
    }
}

对象仍然知道它是什么,并且可以在我们通过getClass询问它时告诉我们。

,原因与此相同:

class Generic<T> {
    void method(T t) {
        print(t.getClass().getSimpleName());
    }
}
public class Program {
    static public void main(String[] args) {
        Generic<String> g = new Generic1<>();
        g.method(new String());
    }
}

对象仍然知道它是什么,并且可以在我们通过getClass询问它时告诉我们。

这与泛型无关


每个对象。您将字符串作为输出,因为这只是您正在创建的字符串对象的运行时类。

这与泛型无关


每个对象。您将字符串作为输出,因为这只是您正在创建的字符串对象的运行时类。

在运行时定义t时,它有一个类型。一些阅读:传入或存储类的实例是绕过类型擦除的经典方法。在运行时定义t时,它有一个类型。阅读:传入或存储类的实例是避免类型擦除的经典方法。