我正在尝试为数组创建Resize方法,并且必须使用通用数组。我有如下构造函数:
public ArrayLists (Class <T[]> a) {
array = (T[])Array.newInstance(a, DEFAULT_SIZE);
}
然后,如果最终用户想要调整数组大小以增强或减少它,我有Resize方法,我想在其中创建一个传入大小的新temp
数组并具有旧数组点到了临时我无法弄清楚如何创建临时数组。到目前为止,我有:
public void Resize (double tempSize) {
//create the temp array of size tempSize
System.arraycopy(array, 0, temp, 0, size);
array = temp;
}//end resize
我尝试过类似于我在构造函数中使用Array.newInstance
的内容,但我只能通过使用Class<T[]>
的另一个参数来实现这一点,然后我就无法重新分配{{1}到array
。而且我不能只创建一个泛型类型的数组,因为java不喜欢它。
这可能会有点容易,但我的主要问题是在测试时我需要创建至少2种不同类型的数组来测试...例如
temp
然后以ArrayLists<String> list = new ArrayLists<>(String[].class);
ArrayLists<Random> list1 = new ArrayLists<>(Random[].class);
为例。有什么建议??
我现在遇到调整resize方法的问题。我创建了2个数组:
list.Resize(20);
并且还有这个默认构造函数:
ArrayLists<String> list = new ArrayLists<>(String[].class);
ArrayLists<Random> list1 = new ArrayLists<>(Random[].class);
(我认为)应该足以初始化默认大小为“10”的数组。但每当我测试它时,它会向我显示list和list1的原始大小为0并且不会让我调整大小。我错过了什么?
答案 0 :(得分:2)
首先,您应该传递Class<T>
,而不是Class<T[]>
。该方法将创建一个数组T[][]
。因此,将构造函数更改为:
public ArrayLists (Class <T> a) {
array = (T[])Array.newInstance(a, DEFAULT_SIZE);
}
并传递String.class
而不是String[].class
。
现在,您可以使用Class#getComponentType()
方法解决您遇到的问题。这将为您提供数组的组件类型Class<T>
:
// Why the type of tempSize is double? It should be `int`
public void resize (int tempSize) {
//create the temp array of size tempSize
T[] temp = (T[]) Array.newInstance(array.getClass().getComponentType(),
tempSize);
System.arraycopy(array, 0, temp, 0, tempSize);
array = temp;
}