为什么我会收到类强制转换异常(具有泛型,具有可比性)?

为什么我会收到类强制转换异常(具有泛型,具有可比性)?,第1张

为什么我会收到类强制转换异常(具有泛型,具有可比性)?

问题是您将泛型类型用作数组的类型。在运行时对数组类型进行了 修饰 (实际上存在于JVM中),但没有对通用类型进行修饰。这意味着您

newE[]
实际上最终将成为
Object[]
所需类型的数组,而不是该数组。

标准集合通过不提供直接访问数组和强制转换为

E
on等 *** 作来解决此问题
get()
。如果您真的认为使用类型化数组是最好的选择,那么您将需要传递
Class<E>clazz
给抽象基类的构造函数,并使用它来构造一个正确类型化的数组:

protected AbstractArrayMyList(Class<E> clazz) {    this.elementClass = clazz;    this.elementData = Array.newInstance(clazz, INITIAL_SIZE);}

您得到的原因

ClassCastException
是,编译器将其签名替换为擦除,这基本上是可接受类型的最大公分母。由于您要缩小子类中的
E
Object
Comparable
,因此该方法上的签名最终被
Comparable[]
代替
Object[]



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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存