长话短说,玩弄仿制品和可比对象,无法直接打印出值。这是一个简单的例子
class Ideone<Key extends Comparable<Key>>
{
private Key[] keys = (Key[]) new Comparable[10];
public static void main (String[] args) throws java.lang.Exception
{
Ideone<Integer> test = new Ideone();
test.keys[0] = 3;
System.out.println(test.keys[0]);
}
}
我得到的错误是:
线程“main”中的异常java.lang.ClassCastException:[Ljava.lang.Comparable;无法转换为[Ljava.lang.Integer;
实时代码示例:http://ideone.com/JPfUZw
答案 0 :(得分:0)
Key
是Comparable
,反之亦然。此外,您无法使用向下转换来初始化泛型数组。
修复代码:
private Key[] keys = (Key[]) new Comparable[10];
要
private Comparable[] keys = new Comparable[10];
这将有效,因为Key
是Comparable
,您可以将Comparable
存储在keys
数组中,因此Key
可以存储在那里。< / p>
或者传递泛型as的类并使用如图所示的Array.newInstance here:
Key[] keys;
public Ideone(Class<Key> clazz, int size) {
keys = (Key[]) Array.newInstance(clazz, size);
}