频道栏目
首页 > 资讯 > Java > 正文

三句话总结JAVA泛型通配符(PECS)

17-06-19        来源:[db:作者]  
收藏   我要投稿

三句话总结JAVA泛型通配符(PECS),在JAVA的泛型集合中,默认都可以添加null,除此以外,还有以下三条规则。

1. “?”不能添加元素

以“?”声明的集合,不能往此集合中添加元素,所以它只能作为生产者(亦即它只能被迭代),如下:

List names = Lists.newArrayList("yiifaa");
//  通配符声明的集合,获取的元素都是Object类型
List allNames = Lists.newArrayList("yiifee");
allNames.addAll(names);
//  只能以Object迭代元素
for(Object name: names) {
    System.out.println(name);
}

2. “? extends T”也不能添加元素

以“? extends T”声明的集合,不能往此集合中添加元素,所以它也只能作为生产者,如下:

List names = Lists.newArrayList("yiifaa");
//  声明消费者
List allNames = Lists.newArrayList("yiifee");
//  消费生产者的元素
allNames.addAll(allNames);

相对于以“?”声明的集合,“? extends T”能更轻松地迭代元素:

List names = Lists.newArrayList("yiifaa");
//  能更精确地确认元素类型
for(String name: names) {
    System.out.println(name);
}

3. “? super T”能添加元素

在通配符的表达式中,只有“? super T”能添加元素,所以它能作为消费者(消费其他通配符集合)。

List allNames = Lists.newArrayList("yiifaa");
//
List names = Lists.newArrayList("yiifee");
//  可以直接添加泛型元素
allNames.addAll(names);
//  也可以添加通配符泛型元素
List names1 = Lists.newArrayList("yiifee");
allNames.addAll(names1);

针对采用“? super T”通配符的集合,对其遍历时需要多一次转型,如下:

//  只能获取到Object类型
for(Object name: allNames) {
    //  这里需要一次转型
    System.out.println(name);
}

结论

JAVA泛型通配符的使用规则就是赫赫有名的“PECS”(生产者使用“? extends T”通配符,消费者使用“? super T”通配符)。

相关TAG标签
上一篇:javascript性能优化-1
下一篇:python学习笔记之字符编码
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站