java 类型通配符 ?
来源:互联网 发布:天猫淘宝运营招聘信息 编辑:程序博客网 时间:2024/05/29 07:59
如果对上篇文章的泛型有所了解后,还需要了解下类型通配符,在java中类型通配符是?
可以将一个类型通配符?,作为类型实参,传递给一个泛型类或者泛型接口。如:List
public class Test { public static void main(String[] args) { List<Integer> list=new ArrayList<>(); list.add(2); list.add(2); list.add(2); list.add(2); sys(list); } public static void sys(List<?> c){ for (int i = 0; i < c.size(); i++) { System.out.println(c.get(i)); } }}
这样,无论我们使用什么样的类型实参数据集合,方法都能正常工作。因为c集合中的所有元素,其类型都是Object的,永远是安全的。
但是这中带通配符的List仅表示它是各种泛型List的父类,并不能把元素添加进去。如下:
List<?> c=new ArrayList<>(); //编译不通过, c.add("s");
因为程序无法确定c集合中元素类型,所以不能添加元素。List< E >接口的定义,add(E e)元素的时候必须是E类的对象或E类子类的对象。使用了类型通配符后,程序不知道E是什么类型,所以程序无法将任何对象添加到集合中。唯一例外的是null,它是所以引用类型的实例。如下:
List<?> c=new ArrayList<>(); //编译通过 c.add(null);
- 设定类型通配符上限
像之前的List
public class Test { public static void main(String[] args) { List<Pet> pList=new ArrayList<Pet>(); pList.add(new Pet()); pList.add(new Pet()); pList.add(new Pet()); //子类对象 pList.add(new Dog()); sys(pList); } public static void sys(List<? extends Pet> c){ for (int i = 0; i < c.size(); i++) { System.out.println(c.get(i)); } }}
执行结果:
fanxing.Pet@15db9742fanxing.Pet@6d06d69cfanxing.Pet@7852e922fanxing.Dog@4e25154f
在这个例子中,想使用这个sys()方法,那么传进来的集合元素必须是Pet类的对象或者是Pet子类的对象(要么是上限类的对象,要么是上限类子类的对象)
阅读全文
0 0
- java-类型通配符
- java 类型通配符
- java--通配符类型
- java 类型通配符 ?
- Java 泛型类型通配符
- 使用类型通配符【java 5.0 tiger】
- 初学Java,泛型类型通配符(三十七)
- java中泛型学习1之类型通配符(?)
- java 类型通配符 直接源码1
- java泛型与通配符类型参数
- java里程碑之泛型--类型通配符
- 【java泛型】类型变量和通配符
- 通配符类型
- java泛型程序设计——通配符类型+通配符的超类型限定
- Java泛型——类型通配符<?> 与 类型通配符上限<? extends Number>
- 在 Java 的泛型类型中使用通配符
- 在 Java 的泛型类型中使用通配符
- 在 Java 的泛型类型中使用通配符
- Learning To Detect Unseen Object Classes by Between-Class Attribute Transfer(阅读报告)
- android干货收集
- 使用productFlavors 出现错误Configuration with name 'debug' not found.
- /matplotlib/dates.py 发生的错误:"Can't create weekday with n == 0"
- CentOS7+Apache2.4.6+Subversion1.7.14+Tomcat9+Mysql5.6+JDK1.8+svnadmin3.0.5傻瓜式搭建
- java 类型通配符 ?
- 对于list的复制问题
- 一定能成功的Android NDK环境配置教程
- weex error NpmPackage.js:50
- PHP生成微信二维码
- 《jQuery基础教程》第三章摘记
- 关于线程中锁的使用以及死锁情况
- Linux tmux 参考手册
- 使用AndroidAnnotations时@AfterViews方法被调用两次的问题