Passing ArrayList<Subclass> to method declared with List<Superclass>

generics, java

Solution

You can use wildcards, if you're using Java version 1.5 and higher.

public static void readList(List<? extends ModelObject> list)

This solution is more generic, because it fits for all `java.util.List` interface implementations and subclasses/subinterfaces of `ModelObject`. For more details go to wildcards tutorial

Problem

I have a method with a parameter containing generics. ``` public static void readList(List<ModelObject> list) { // more code } ``` I want to pass an `ArrayList` of `ModelObjectImplementation`s to this method. ``` ArrayList<ModelObjectImplementation> myList; myList = ... readList(myList); // gives compilation error ``` `ModelObject` is an interface that `ModelObjectImplementation` implements. How can I change the method declaration to allow this?

Original source