I come across Java code like this:
public interface Foo<E> {}
public interface Bar<T> {}
public interface Zar<?> {}
What is the difference among all three of the above and what do they call this type of class or interface declarations in Java?
Well there's no difference between the first two - they're just using different names for the type parameter (E
or T
).
The third isn't a valid declaration - ?
is used as a wildcard which is used when providing a type argument, e.g. List<?> foo = ...
means that foo
refers to a list of some type, but we don't know what.
All of this is generics, which is a pretty huge topic. You may wish to learn about it through the following resources, although there are more available of course: