我有以下抽象类:
public abstract class Entity{
private final ArrayList<Entity> parent;
// a lot of code that is not important now
}
这个类的一个示例拥有一个“它自己的对象”的arraylist。但是,我如何为“实体”的所有子类归档相同的东西呢?e、 g.我有一门课:
public class Player extends Entity {
// a lot of code that is not important now
}
现在“玩家”持有 ArrayList<Entity>
但它应该有一个 ArrayList<Player>
. 对于实体的所有子类,这应该是相同的(有很多)。我的伪代码是: ArrayList<THIS> parent
.
我怎样才能做到这一点?
4条答案
按热度按时间mjqavswn1#
可以将对象用作类型。java中的所有类都是object类的子类。代码:
然后,在引用arraylist时,只需将其强制转换为当前类。例子:
cigdeys32#
为了达到这个目的,你可以让你的班级
Entity
泛型类。例子:您的子类现在可以如下所示:
使用它看起来像这样:
bgtovc5b3#
你可以用这个来实现。
我们声明一个泛型t,然后添加一个规则,该泛型必须扩展实体类。
类player,从实体扩展,然后,可以使用。
以下代码。。。
ggazkfy84#
实际上,你不能这么做。java没有这个特性(自类型)。理论上,您可以这样做,但它有一些限制,以便它是类型安全的。
假设您可以这样做,那么我可以这样编写代码:
那没什么意义,是吗?
e
会有一个ArrayList<Player>
,但编译器认为我们可以添加SomeOtherKindOfEntity
去吧!所以你不能用这种类型Entity
作为变量的类型。下面是另一个类似的情况:
实际上,您可以使用泛型参数来解决此问题:
大多数java程序员都会认识到泛型参数与子类本身是同一类型的,但是编译器没有。这就是为什么这只是一个解决办法,而不是真正的“自我类型”。