我有一个关于泛型的问题。
我定义了基类ServiceObject
和ServiceObjectsList
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...
现在我需要治疗UserServiceObjectsList
如ServiceObjectsList<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/