问题是您将泛型类型用作数组的类型。在运行时对数组类型进行了 修饰 (实际上存在于JVM中),但没有对通用类型进行修饰。这意味着您
newE[]实际上最终将成为
Object[]所需类型的数组,而不是该数组。
标准集合通过不提供直接访问数组和强制转换为
Eon等 *** 作来解决此问题
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[]。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)