扩展泛型集合
Extending generic collection
为了简化或防止编写冗余代码而扩展泛型 class 有什么问题吗?
基本上我想做的是
class EnityGroup extends LinkedList<Entity>
{
....
}
但我见过的每个例子似乎都是首选。
如果有的话,我不得不担心的问题、疑虑、冲突等是什么。
您正在寻找的是类型别名,这是其他编程语言(例如 C 或 C++)中可用的功能。 Java 不提供此类功能。
对于类型系统 EntityGroup
is-a LinkedList<Entity>
所以不会发生任何不好的事情。每个接受 LinkedList<Entity>
的方法都将接受一个 EntityGroup
实例。
唯一的缺点是构造函数不能直接供您的子class使用,因此您不得不重新声明它们(可能将参数转发给 superclass 构造函数)。
从多态的角度来看,这不像具有类型别名,因为 EntityGroup
是扩展另一种类型的不同类型,而不是 LinkedList<Entity>
的不同名称。因此 LinkedList.class != EntityGroup.class
,这可能会导致使用反射的代码出现问题,除非正确编写以自动检测层次结构中的类型。
继承是为了丰富或专门化 class 的行为,但在这种情况下并非如此。你基本上是在使用一个特性来获得一些不应该以这种方式获得的东西,但是通过类型别名,不幸的是在 Java.
中不可用
为了简化或防止编写冗余代码而扩展泛型 class 有什么问题吗?
基本上我想做的是
class EnityGroup extends LinkedList<Entity>
{
....
}
但我见过的每个例子似乎都是首选。
如果有的话,我不得不担心的问题、疑虑、冲突等是什么。
您正在寻找的是类型别名,这是其他编程语言(例如 C 或 C++)中可用的功能。 Java 不提供此类功能。
对于类型系统 EntityGroup
is-a LinkedList<Entity>
所以不会发生任何不好的事情。每个接受 LinkedList<Entity>
的方法都将接受一个 EntityGroup
实例。
唯一的缺点是构造函数不能直接供您的子class使用,因此您不得不重新声明它们(可能将参数转发给 superclass 构造函数)。
从多态的角度来看,这不像具有类型别名,因为 EntityGroup
是扩展另一种类型的不同类型,而不是 LinkedList<Entity>
的不同名称。因此 LinkedList.class != EntityGroup.class
,这可能会导致使用反射的代码出现问题,除非正确编写以自动检测层次结构中的类型。
继承是为了丰富或专门化 class 的行为,但在这种情况下并非如此。你基本上是在使用一个特性来获得一些不应该以这种方式获得的东西,但是通过类型别名,不幸的是在 Java.
中不可用