相关疑难解决方法(0)

用Java创建通用数组

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; 不能投...

有人能告诉我如何创建一个泛型类型的数组?谢谢.

java arrays generics casting

4
推荐指数
1
解决办法
9899
查看次数

泛型类中的java泛型转换

我正在编写一个通用最大堆的简单实现.如果我写

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泛型伤害了我的大脑.

java generics casting

2
推荐指数
1
解决办法
193
查看次数

标签 统计

casting ×2

generics ×2

java ×2

arrays ×1