无界通配符–?
当传入参数不确定的时候会出现这个问题
改成
package main.generics;
public class ShowMsg {
public void showFlag(MyGenerics<?> generics) {
System.out.println(generics.getFlag());
}
}
package main.generics;
public class Test06 {
public static void main(String[] args) {
ShowMsg showMsg = new ShowMsg();
MyGenerics<Integer> objectMyGenerics = new MyGenerics<>();
objectMyGenerics.setFlag(1235445);
showMsg.showFlag(objectMyGenerics);
MyGenerics<Number> objectMyGenerics1 = new MyGenerics<>();
objectMyGenerics1.setFlag(122);
showMsg.showFlag(objectMyGenerics1);
MyGenerics<String> objectMyGenerics2 = new MyGenerics<>();
objectMyGenerics2.setFlag("str");
showMsg.showFlag(objectMyGenerics2);
}
}
现在两个都能输出,不会报错
通配符的上限限定
无界通配符表示任意类型,需要把类型种类变小
public class ShowMsg {
public void showFlag(MyGenerics<? extends Number> generics) {
System.out.println(generics.getFlag());
}
}
限定之后 泛型只能是Number类的子类
通配符的下限限定
只能是T类型 以及T类型的父类或父接口
public class ShowMsg {
public void showFlag(MyGenerics<? super Integer> generics) {
System.out.println(generics.getFlag());
}
}
全文件下载 0积分
链接: java基础泛型 学习全文件.