由于Java泛型的实现,您不能拥有这样的代码:
public class GenSet<E> {
private E a[];
public GenSet() {
a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation
}
}
Run Code Online (Sandbox Code Playgroud)
如何在保持类型安全的同时实现这一点?
我在Java论坛上看到了这样的解决方案:
import java.lang.reflect.Array;
class Stack<T> {
public Stack(Class<T> clazz, int capacity) {
array = (T[])Array.newInstance(clazz, capacity);
}
private final T[] array;
}
Run Code Online (Sandbox Code Playgroud)
但我真的不知道发生了什么.
我已经给了一个骨架类"OrderSet",它实现了一个类"Set",其中一个变量T []项是通用的,我想把它初始化为一个包含5个元素的数组,但在做了一些阅读之后,我得知您无法初始化通用数组,如果是这样的话我怎么能初始化数组呢?
这是班级
public class OrderSet<T extends Comparable> implements Set<T> {
private T[] items;
private int theSize;
public OrderSet()
{
items = (T[]) new Set[5];
}
@Override
public void add(T s)
{
}
@Override
public void show()
{
}
}
Run Code Online (Sandbox Code Playgroud)