How to write a generic interface with List or Collection of implemented class of the interface?
I encounter to this problem when I write a tree node interface, here is the details of the problem: I need to create an interface for the following two classes, how to write the interface?
Both classes have
getChildren method, and they are the methods interface need to define. However, the tricky part is how to represent the
DoubleLinkedTreeNode in their interface? The answer is: wildcards, here is the interface:
The reason I use question mark ?, which is the wildcards, is that it refers to unknown types. This is because that a collection of Object is not the supertype of any collection. For example,
List<TreeNodeInterface<T>> is not the supertype of
List<DoubleLinkedTreeNode<T>>, so with
? extends TreeNodeInterface<T>, I represent all subtypes of
TreeNodeInterface<T>. This is called upper-bounded wildcard, where type
TreeNodeInterface<T> is the upper bound.