【发布时间】:2020-08-09 16:17:54
【问题描述】:
我正在以通用方式从 LibGDX 扩展 Array extends Array<MyClass> 但是当我直接访问它的 items 数组时,我得到一个错误 Object 无法转换为类 MyClass。
我不明白为什么会出现此错误。
public class MyArray extends Array<MyClass> {
public void method() {
for (MyClass myItem : items)//throws java.lang.Object; cannot be cast to class error on this line
System.out.println(myItem);
}
}
我还注意到,如果我尝试用 items[2] 做类似的事情,会抛出同样的错误,而 get(2) 没有问题...
编辑:这是我从 LibGDX 使用的 Array Array
【问题讨论】:
-
@Zabuzard
Array来自 LibGDX,如标签所示。我会把它添加到标题中。我通常将框架名称放在标题中,但有很多人对其进行编辑和删除....然后就会发生这样的事情。 -
我对@987654334@ 类不太了解,但它的内部
items数组实际上是Object[]类型而不是T[],而它的方法如get维护泛型的类型安全。因此,直接使用items将返回Object,可以安全地转换为T。因此,您只需向MyClass添加一个演员表,这将是安全的。但是你绝对不应该直接使用items,而是使用类提供的仍然保持类型安全的方法。 -
@Zabuzard 它看起来确实是 T 类型,它被列为
public T[] items;libgdx.badlogicgames.com/ci/nightlies/docs/api/com/badlogic/gdx/… 我正在扩展数组,因为我喜欢直接访问这些项目。通常一切正常,但我不知道为什么会抛出这个错误。似乎没有意义。 -
文档可能不准确或来自不同的版本,您是否查看了实际的源代码?
-
@Zabuzard 是的,我知道,我说过我自己从源代码
public T[] items;复制了它,所以它确实是这么说的。我还给了你那个链接,所以你可以检查数组。如果你想要源代码,你可以在这里看到它:github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/…