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 ServiceObjects, ServiceObjectsLists and they descendants realy needed. Then encapsulate some functional. 
 
     
     
    