如何创建新的AnyType数组

时间:2016-03-12 03:44:57

标签: java arrays

我正在使用答案How do I create a new AnyType[] array?中的代码。我的问题是如何初始化这个数组。当我尝试运行此代码时,我在Clear()上得到一个空指针异常,我认为是由于使用了theItems.getClass,因为尚未声明项目。

public class Whatever<AnyType extends Comparable<? super AnyType>>  extends AbstractCollection<AnyType> implements List<AnyType> {

private static final int DEFAULT_CAPACITY = 10;
private static final int NOT_FOUND = -1;

private AnyType[] theItems;
private int theSize;
private int modCount = 0;


public Whatever() {
    clear();
}

/**
 * Change the size of this collection to zero.
 */
public void clear() {
    theSize = 0;
    theItems = (AnyType[]) java.lang.reflect.Array.newInstance(theItems.getClass().getComponentType(), DEFAULT_CAPACITY);
    modCount++;
}
}

1 个答案:

答案 0 :(得分:1)

所以我找到了两种方法来实现这一目标。第一个,使用Jack的上述评论,看起来像:

public static <T> T[] alloc(int length, T ... base) {
    return Arrays.copyOf( base, length );
}

然后可以像:

那样调用它
theItems = ClassName.alloc(DEFAULT_CAPACITY);

我最终使用的方式可以使用,因为我实现了可比较的:

theItems = (AnyType []) new Comparable[ DEFAULT_CAPACITY ];