栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中未绑定通配符泛型的用途和要点是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中未绑定通配符泛型的用途和要点是什么?

当您的方法实际上并不关心实际类型时,未绑定类型可能很有用。

一个原始的例子是这样的:

public void printStuff(Iterable<?> stuff) {  for (Object item : stuff) {    System.out.println(item);  }}

由于

PrintStream.println()
可以处理所有引用类型(通过调用
toString()
),因此我们 不在乎
该引用的实际内容
Iterable
是什么。

来电者 可以在通过

List<Number>
Set<String>
Collection<? extendsMySpecificObject<SomeType>>

还要注意,根本不使用泛型(使用原始类型进行调用)会产生完全不同的效果:这会使编译器处理 整个对象 ,就好像泛型 根本不存在一样
。换句话说:不仅会忽略类的类型参数,还会忽略方法上的所有泛型类型参数。

另一个重要的区别是,您不能将任何(非

null
)值
Collection<?>
添加到,而可以将 所有 对象添加到原始类型
Collection

这不会编译,因为的type参数

c
是未知类型(=通配符
?
),因此我们无法提供保证可分配给该值的值(
null
,可分配给所有引用类型的值除外)。

Collection<?> c = new ArrayList<String>();c.add("foo");    // compilation error

如果不使用type参数(即使用原始类型),则可以向集合中添加 任何内容

Collection c = new ArrayList<String>();c.add("foo");c.add(new Integer(300));c.add(new Object());

请注意,编译器会 警告 您不要使用原始类型,尤其是出于这个原因:它会删除与泛型相关的所有类型检查。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/449933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号