-
捕获转换旨在使通配符(通用)
?
有用。假设我们有以下课程:
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部分),它明确指出:
捕获转换使编译器可以为捕获的通配符制造一个占位符类型名称,以便类型推断可以将其推断为该类型。
希望对您有帮助。
-
任何人都可以向我解释 IEnumerable 和 IEnumerator 吗?
2022-05-26 关注 0 浏览15 1答案
-
你了解什么是AOP吗?它的作用是什么?举个例子
2021-01-11 关注 0 浏览163 3答案
-
在状态字段中获取空值,任何人都可以解释我在做什么错吗?
2021-03-12 关注 0 浏览99 1答案
-
吊运物料任何人都可以进行绑扎。
2022-05-14 关注 0 浏览11 1答案
-
什么是数据库范式,你能举个例子吗?
2022-05-26 关注 0 浏览24 1答案
-
任何人都可以用 C# 中的签名浮点数来解释这种奇怪的行为吗?
2022-05-26 关注 0 浏览10 1答案
-
你了解什么是高阶组件吗?可否举个例子说明下?
2021-01-11 关注 0 浏览546 1答案
-
电气设备灭火时,任何人都可以指挥或带领灭火。
2022-05-08 关注 0 浏览10 1答案
-
市政消火栓是公用设施,任何人都可以随意使用它。( )
2022-05-07 关注 0 浏览14 1答案
-
vue中什么是递归组件?举个例子说明下?
2021-01-11 关注 0 浏览1008 1答案