I have a question about generics.
I defined base classes ServiceObject
and ServiceObjectsList
class ServiceObject {};
class ServiceObjectsList<T extends ServiceObject> extends ArrayList<T> {};
Then I defined some descendant classes:
class UserServiceObject extends ServiceObject {};
class UserServiceObjectsList extends ServiceObjectsList<UserServiceObject> {};
class ItemServiceObject extends ServiceObject {};
class ItemServiceObjectsList extends ServiceObjectsList<ItemServiceObject> {};
// etc...
Now I need to treat UserServiceObjectsList
as ServiceObjectsList<ServiceObject>
:
If I write:
ServiceObjectsList displayableServiceObjects;
then I can't iterate over them:
for (ServiceObject serviceObject : displayableServiceObjects)
throw error "Incompatible types".
If I write ServiceObjectsList<ServiceObject> displayableServiceObjects
then I can't assign UserServiceObjects
:
displayableServiceObjects = new UserServiceObjects();
It throws the very same "Incompatible types" error;
What I do wrong?
All ServiceObject
s, ServiceObjectsList
s and they descendants realy needed. Then encapsulate some functional.