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

时间:2016-08-28 13:14:40

标签: java generics type-erasure

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());
    }
}

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

2 个答案:

答案 0 :(得分:8)

出于同样的原因:

            Object s = new String();
// Note ----^^^^^^
            System.out.println(s.getClass().getSimpleName());

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

答案 1 :(得分:3)

这与泛型无关。

每个对象knows it class object。你得到&#34; String&#34;作为输出,因为它只是字符串对象的运行时类(顺便说一下 - 你正在创建)。