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

为什么会出现“ instanceof的非法泛型类型”?

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

为什么会出现“ instanceof的非法泛型类型”?

o不是通用类型-只是普通对象。

那不是问题。问题…和两个编译错误的根本原因…是

D
泛型类。它是泛型的,因为它是泛型类中的非静态嵌套类。其完全限定名称为
some.pkg.C<T>.D

仅供参考:实数D确实使用了通用参数T。

而事实上,它 可以 利用的

T
是什么使
D
一个通用类。

您无法使用

instanceofD
(D)
通用类型擦除的原因。基本上,运行时无法区分(say)
C<String>.D
和的类型
C<Integer>.D
。并且由于无法做到这一点,因此无法确定是否
instanceofD
应该返回
true
false
或者是否
(D)
应该成功或抛出
ClassCastException

一种解决方案是将其声明

D
为静态。但这不适用于您的“实数D”,因为静态类无法使用封闭类中的泛型类型参数。您的“ FYI”表示这样做。

另一种解决方案是实例化外部类

C
传递给它的实际类型的
T
作为
java.lang.Class<T>
实例。然后使用该
Class
实例来实现运行时类型检查并根据需要进行强制转换。这很可能是混乱的。

第三种解决方案是 仔细 分析代码,并确定@SuppressWarning注释是否安全,以禁止显示“不安全的强制转换”等警告。

什么类型的擦除?“ o”直接是对象类型。

实际上

Object
是变量的 声明 类型
o
。实际对象很可能具有其他类型,并且正是 类型(
D
例如,如果是实例)将经受类型擦除。



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

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

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