Java 用泛型声明和分配数组
我试图在使用泛型时声明和分配数组,但在这方面遇到了一些问题。我注意到,通常使用泛型分配数组是不可能的。我找到了这项工作,但似乎对我不起作用。一旦到达Array.newInstance(c,capacity),它就会输出一个NullPointerException。我只是希望这段代码声明数组。你知道为什么它不能按预期的方式工作吗Java 用泛型声明和分配数组,java,generics,Java,Generics,我试图在使用泛型时声明和分配数组,但在这方面遇到了一些问题。我注意到,通常使用泛型分配数组是不可能的。我找到了这项工作,但似乎对我不起作用。一旦到达Array.newInstance(c,capacity),它就会输出一个NullPointerException。我只是希望这段代码声明数组。你知道为什么它不能按预期的方式工作吗 public class MyHeap<T extends Comparable<T>> implements Heap<T> { C
public class MyHeap<T extends Comparable<T>> implements Heap<T> {
Class<T> type;
T[] heap;
int size;
int capacity;
MyHeap(int x){
capacity = x;
size = 0;
arraySet(type, capacity);
}
private void arraySet(Class<T> c, int capacity){
@SuppressWarnings("unchecked")
final T[] heap = (T[]) Array.newInstance(c, capacity);
this.heap = heap;
}
公共类MyHeap实现Heap{
班级类型;
T[]堆;
整数大小;
国际能力;
MyHeap(intx){
容量=x;
尺寸=0;
阵列集(类型、容量);
}
专用void阵列集(c类,内部容量){
@抑制警告(“未选中”)
最终的T[]堆=(T[])数组;
this.heap=堆;
}
}解决您的根本问题: …但我不明白什么是阶级?如何设置该值 你的选择是:
MyHeap (int x, Class<T> type) { this.type = type; ... }
// Usage
new MyHeap(64, Integer.class);
为此目的使用此模式对象
数组(对象[]堆
),就不必在创建数组时使用该类型,只要在函数参数列表中使用T
,编译器就会验证一切是否正常。对于T
返回类型,您必须在返回对象()之前将对象强制转换为T
,但只要您具有每个对象
都是T
的不变量,那么它将始终是一个安全强制转换我会选择选项3,因为它会导致最简单的API。因为
type
是null
。您可以使用列表
,这样就不需要引用组件类型。噢!我没有意识到这一点。但我该怎么设置呢。不幸的是,我必须是一个数组。我这样做是作为我的数据结构和算法类实验室的一部分,它要求该实现使用阵列,而不仅仅是使用可比[]
?您已经知道它的组件类型:Comparable
。有关创建泛型数组的信息,请参阅:我使用了该链接,但我不明白什么是类?如何设置该值?
MyHeap (int x, T obj) { this.type = obj.getClass(); ... }
// Usage
new MyHeap(64, new Integer());