java泛型和反射,为什么会有不同的结果

时间:2017-06-23 01:54:03

标签: java generics reflection

测试测试= new Test(){}; {}中没有任何内容,为什么结果不同。

public class Test<T> {
    private final TypeToken<T> typeToken = new TypeToken<T>(getClass()) {};
    private final Type type = typeToken.getType();

    public void foo() {
        System.out.println(this.type);
    }

    public static void main(String[] args) {
        Test<Integer> test = new Test<Integer>() {};
        Test<Integer> test2 = new Test<Integer>();
        test.foo();// class java.lang.Integer
        test2.foo();//T
    }
}

1 个答案:

答案 0 :(得分:1)

结果不同,因为当你写这个

Test test = new Test() {};

指示编译器为您创建一个新的匿名类型。该类型派生自Test,并且可以(但不必)覆盖其方法。

在您的情况下,类型不会覆盖任何方法,但它是一种不同的类型。