无界通配符–?
当传入参数不确定的时候会出现这个问题

改成
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基础泛型 学习全文件.

本文深入讲解Java中的泛型概念,包括无界通配符、上限限定及下限限定的使用方法,并通过具体示例演示如何在实际编程中应用这些泛型特性。
2408

被折叠的 条评论
为什么被折叠?



