我目前正在用Java写一个游戏。 在这个游戏中,我使用数组作为子弹等东西的数据结构。 现在我没有用数组编写一个使用泛型类型的包装类。 我构建了以下示例来演示我的问题。包装类的Java元素通用实例化其元素
public class CoolArray< E extends MyInterface > {
private final E[] array;
public int aliveElements;
public CoolArray(final Class< ? extends MyInterface > clazz, int size) {
array = (E[])Array.newInstance(clazz, size);
for (int i = 0; i < array.length; i++) {
// i would like to instantiate all array elements
// to avoid constant object allocation at runtime
try {
array[i] = clazz.newInstance(); // always throws NullPointerException
} catch (Exception e) { } // omitted
}
aliveElements= 0;
}
public E get(int i) {
return array[ i ];
}
// rest omitted ...
}
这应该是我的数组包装类。我在加载关卡时创建这个数组。在更新和渲染游戏的方法,我迭代只有aliveElements - 数组的元素。
MyInterface的contains方法存根如更新和渲染 ...
现在,每当我拍了子弹,我呼吁元素一些初始化方法在位置aliveElements。我这样做是为了避免垃圾收集。
myCoolArray.get(myCoolArray.aliveElements).init(...)
这是失败,因为一个ClassCastException异常的不管我怎么尝试实例数组中的每一个元素的一部分。
注:我很清楚,在上面的例子中,我将得到一个空指针异常,因为我没有实例化元素!这不是问题。
谷歌,一些书籍和其他问题在这里告诉我,泛型类型不能在Java中实例化。所以现在我的问题是:有没有解决这个问题的方法?
我不想在更新分配新对象或渲染方法,因为我害怕的是什么垃圾收集器会做帧速率不时:)
感谢您的回复。这看起来很复杂,应该很简单。我没有尝试过,因为我知道我整个过程中做错了什么。尽管我感谢你的努力! – grAPPfruit