Java Generics:在泛型类

时间:2015-06-12 12:27:10

标签: java generics type-erasure

如果我用javac Test.java -Xlint:unchecked编译下面的代码,由于类型擦除,对变量c4的赋值会产生警告。 这里的类型是无关紧要的,只是例子。

为什么对象引用g3会丢失有关成员变量Comparator<String> strCmp的类型信息?为什么c1没有发出相同的警告,唯一的区别是该类不是通用的?

import java.util.Comparator;

public class Test {

    NormalClass n = new NormalClass();
    Comparator<String> c1 = n.strCmp;

    GenericClass<Long> g1 = new GenericClass<Long>();
    Comparator<String> c2 = g1.strCmp;

    GenericClass<?> g2 = new GenericClass<Long>();
    Comparator<String> c3 = g2.strCmp;

    GenericClass g3 = new GenericClass<Long>();
    Comparator<String> c4 = g3.strCmp;
}

class NormalClass {
    public Object t;
    public Comparator<String> strCmp;
}

class GenericClass<T> {
    public T t;
    public Comparator<String> strCmp;
}

0 个答案:

没有答案