java - 泛型继承有什么问题

标签 java oop generics

我有一个关于泛型的问题。

我定义了基类ServiceObjectServiceObjectsList

class ServiceObject {};
class ServiceObjectsList<T extends ServiceObject> extends ArrayList<T> {};

然后我定义了一些后代类:

class UserServiceObject extends ServiceObject {};
class UserServiceObjectsList extends ServiceObjectsList<UserServiceObject> {};

class ItemServiceObject extends ServiceObject {};
class ItemServiceObjectsList extends ServiceObjectsList<ItemServiceObject> {};

// etc...

现在我需要治疗UserServiceObjectsListServiceObjectsList<ServiceObject> :

如果我写:

ServiceObjectsList displayableServiceObjects; 

然后我无法迭代它们:

for (ServiceObject serviceObject : displayableServiceObjects)

抛出错误“类型不兼容”。

如果我写ServiceObjectsList<ServiceObject> displayableServiceObjects 那么我无法分配 UserServiceObjects :

displayableServiceObjects = new UserServiceObjects();

它抛出完全相同的“不兼容类型”错误;

我做错了什么?

全部ServiceObject s,ServiceObjectsList他们和他们的后代确实需要。然后封装一些功能。

最佳答案

您应该在声明中指定泛型类型:

ServiceObjectsList<? extends ServiceObject> displayableServiceObjects; 

“不兼容类型”错误将会消失...

关于java - 泛型继承有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28604778/

相关文章:

swift - 在 Apple 的 Swift 中实现通用接口(interface)

Java 泛型奇怪的行为

java - 难以理解多态性

java - 使用 OpenGL (JOGL) 的良好 3D 爆炸和粒子效果?

java - 如何修复 'android.os.NetworkOnMainThreadException' ?

java - 为什么 `Outer.Inner inner = o.new Inner();` 不是 `Outer.Inner inner = o.new Outer.Inner();` ?

actionscript-3 - 您如何决定使用抽象类和接口(interface)?

oop - 适配器 - 适配器模式的任何真实示例

generics - 此语法是什么意思 (<T=Self>) 以及何时使用它?

java - 使用 Javafxpackager 添加多个依赖的 Jars