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