编辑:这是不上述问题的副本。原始问题涉及在编译时类型未知的列表。这个问题涉及像通用列表的构造一样的数组。
例如,final E[] a = (E[]) Array.newInstance(c, s);
的上述解决方案将无效,因为我无法获取List<MyClass>.class
而且您也无法从Object[]
转换为List<MyClass>[]
处理类似泛型类型的数组的惯用方法是什么?例如,我想要一个List<MyClass>
数组。 ArrayList<List<MyClass>> myClassArray
无法直接使用,因为即使myClassArray.set(5, myClassObj)
为0,我也需要能够执行myClassArray.size()
之类的操作。使用
for(int i = 0; i < mySize; i ++){
myClassArray.add(null)
}
有效,但很难看。
List<MyClass> myClassArray[]
无效,因为you can't create a generic array。那么实现目标的最惯用方法是什么?一旦创建,数组的大小就不会改变。
答案 0 :(得分:2)
创建自己的类来模拟数组。
class Array<T> {
final Object[] data;
public Array(int size) {
data = new Object[size];
}
public void set(int index, T datum) {
data[index] = datum;
}
@SuppressWarnings("unchecked")
public T get(int index) {
return (T) data[index];
}
}
由于您控制对底层数组的访问,因此您知道其中的元素都是T
类型的。
答案 1 :(得分:0)
通常的方法是
List<MyClass>[] myClassArray = new List[size];
参数化类型数组的类型是“不安全”的原因非常模糊(因为当你将某些东西放入其中时,它应该在运行时检查它是组件类型的一个实例,但它实际上是不可能的检查参数化类型的参数)并且与您的目的无关。