扩展通用集合

时间:2015-07-24 03:43:28

标签: java generics inheritance design-patterns collections

扩展泛型类只是为了简化或防止编写冗余代码有什么问题吗?

基本上我想做的是

class EnityGroup extends LinkedList<Entity>
{
    ....
}

但我看到的每个例子都是首选。

如果有的话,我不得不担心的问题,疑虑,冲突等。

1 个答案:

答案 0 :(得分:1)

您正在寻找的是类型别名,这是其他编程语言(例如C或C ++)中提供的功能。 Java没有提供这样的功能。

对于类型系统EntityGroup is-a LinkedList<Entity>,所以不会发生任何不好的事情。接受LinkedList<Entity>的每个方法都会接受EntityGroup个实例。

唯一的缺点是构造函数不能直接用于您的子类,因此您不得不重新声明它们(可能将参数转发给超类构造函数)。

从多态的角度来看,这与拥有类型别名不同,因为EntityGroup是另一种类型,它扩展了另一种类型,而不是LinkedList<Entity>的不同名称。所以LinkedList.class != EntityGroup.class,这可能会导致使用反射的代码出现问题,除非正确编写以自动检测层次结构中的类型。

继承是为了丰富或专门化类的行为,在这种情况下不是这种情况。你基本上使用一个特性来获得一些不是以这种方式获得的东西,而是通过类型别名来实现,遗憾的是,它不能用于Java。