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

Java中的捕获转换是什么,任何人都可以举个例子吗?

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

Java中的捕获转换是什么,任何人都可以举个例子吗?

捕获转换旨在使通配符(通用)

?
有用。

假设我们有以下课程:

public interface Test<T> {    public void shout(T whatever);    public T repeatPreviousShout();}

在我们代码的某个地方,

public static void instantTest(Test<?> test) {    System.out.println(test.repeatPreviousShout());}

因为

test
不是原始值,
Test
并且因为
repeatPreviousShout()
在“ hindsight”中返回a
?
,所以编译器知道有一个
T
充当的类型参数
Test
。这
T
是针对未知的,
T
因此编译器会擦除未知类型(对于通配符,它​​将替换为
Object
),因此
repeatPreviousShout()
返回
Object

但是如果有的话

public static void instantTest2(Test<?> test) {    test.shout(test.repeatPreviousShout());}

编译器会给我们类似的错误

Test<capture#xxx of ?> cannot be applied
xxx
例如,其中有一个数字
337
)。

这是因为编译器尝试进行类型安全性检查,

shout()
但是由于接收到通配符,因此它不知道
T
代表什么,因此创建了一个占位符,称为 Capture
of

从这里开始(Java理论和实践:通用泛滥,第1部分),它明确指出:

捕获转换使编译器可以为捕获的通配符制造一个占位符类型名称,以便类型推断可以将其推断为该类型。

希望对您有帮助。



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

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

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