public K[] toArray()
{
K[] result = (K[])new Object[this.size()];
int index = 0;
for(K k : this)
result[index++] = k;
return result;
}
Run Code Online (Sandbox Code Playgroud)
这段代码似乎不起作用,它会抛出异常:
java.lang.ClassCastException:[Ljava.lang.Object; 不能投...
有人能告诉我如何创建一个泛型类型的数组?谢谢.
我正在编写一个通用最大堆的简单实现.如果我写
public class FastMaxHeap<T>{
T[] data;
int size;
static final int HEAP_SIZE = 10000;
@SuppressWarnings("unchecked")
public FastMaxHeap(){
data = (T[]) new Object[HEAP_SIZE];
size = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
它汇编.现在要实际实现堆,即写入maxHeapify(),我需要能够比较两个T.先验似乎可能的一个选择是告诉编译器T实现Comparable.但是,如果我用<T implements Comparable>键入replace <T>,编译器会抱怨 - 我该怎么做?
或者,我可以定义一个类
public class HasValue{
int value;
public HasValue(int value){
this.value = value;
}
Run Code Online (Sandbox Code Playgroud)
}
理论上我应该能够比较两个HasValue对象,如x.value> y.value.但如果我输入
public class FastMaxHeap<T extends HasValue>{
T[] data;
int size;
static final int HEAP_SIZE = 10000;
@SuppressWarnings("unchecked")
public FastMaxHeap(){
data = (T[]) new Object[HEAP_SIZE];
size = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我现在得到一个ClassCastException.这里发生了什么?Java泛型伤害了我的大脑.