一.泛型通配符
1.什么是泛型通配符?
"?" 表示实际参数类型,可以是任意类型
void test(Demo <?> d){
}
2.类型通配符上限
? extends Number (以Number为例)
表示传入的实参类型只能是Number及其子类
void test(Demo<? extends Number> d){
}
3.类型通配符下限
? super Number (以Number为例)
表示传入的实际参数类型只能是Number及其父类
void test(Demo<? super Number> d){
}
二.类型擦除
-
泛型信息只存在于代码的编译阶段,在进入JVM之前,与泛型相关的信息会被擦除
下面通过调用方法测试进入JVM的参数类型
public class Test<T> {
public T name;
public static void main(String[] args) throws NoSuchFieldException {
Test<String> t = new Test<>();
t.name="Tom";
Class c = t.getClass();
Field f = c.getField("类型擦除测试");
System.out.println(f.getType()+":"+f.getName());
}
}
运行结果如下:
class java.lang.Object:类型擦除测试
通过运行结果,我们证实了泛型信息只存在于代码的编译阶段