为什么对泛型的这种使用不会引发运行时或编译时异常?

为什么对泛型的这种使用不会引发运行时或编译时异常?,第1张

为什么对泛型的这种使用不会引发运行时或编译时异常?

这是因为重载解析解决了您的

println
调用
println(Object)
,因为没有
println(Integer)

请记住,Java的泛型会在运行时删除。像这样

(E)"Foo"
的演员阵容将被删除,并移至呼叫站点。有时这不是必需的,因此仅在需要时才将内容转换为正确的类型。

换句话说,在内部不执行任何强制转换

getFoo
。语言规范支持:

第5.5.2节:已 检查的演员表和未检查的演员表

  • 演员表是完全未经检查的演员表。

对于此类转换,不执行任何运行时 *** 作。

删除后,

getFoo
返回
Object
。并将其传递到中
println(Object)
,这完全可以。

如果调用此方法并通过

foo.getFoo
则会 收到错误消息:

static void f(Integer i) {    System.out.println(i);}// ...f(foo.getFoo()); // ClassCastException

因为这一次 需要 投射



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5430062.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存