通配符的下限限定
下限限定表示通配符的类型是T类型以及T类型的父类或者T接口以及T接口的父接口。
注:该方法不适用泛型类
语法结构
public void showFlag(Generic<? super Integer> generic) {
}
示例:
public class ShowMsg {
public void showFlag(Generic<? super Integer> generic) {
System.out.println(generic.getFlag());
}
}
public class Test5 {
public static void main(String[] args) {
ShowMsg showMsg = new ShowMsg();
Generic<Integer> generic = new Generic<>();
generic.setFlag(20);
showMsg.showFlag(generic);
Generic<Number> generic1 = new Generic<Number>();
generic1.setFlag(50);
showMsg.showFlag(generic1);
}
}
泛型总结
泛型主要用于编译阶段,编译后生成的字节码class文件不包含泛型中的类型信息。类型参数在编译后会被替换成Object,运行时虚拟机并不知道泛型。因此,使用泛型时,如下几种情况是错误的:
- 基本类型不能用于泛型
Test<int> t; 这样写法是错误,可以使用对应的包装类;Test<Integer> t; - 不能通过类型参数创建对象
T elm = new T();运行时类型参数T会被替换成Object,无法创建T类型的对象,容易引起误解,所以在Java中不支持这种写法。