The issue you’re encountering is that even though the method emptyList()
returns List<T>
, you haven’t provided it with the type, so it defaults to returning List<Object>
. You can supply the type parameter, and have your code behave as expected, like this:
public Person(String name) {
this(name,Collections.<String>emptyList());
}
Now when you’re doing straight assignment, the compiler can figure out the generic type parameters for you. It’s called type inference. For example, if you did this:
public Person(String name) {
List<String> emptyList = Collections.emptyList();
this(name, emptyList);
}
then the emptyList()
call would correctly return a List<String>
.