I am new to java and am trying to understand the curious syntax below from Java Generics and Collections book.. (I worked extensively with C++ templates and hence can claim to understand the basics of generic programming and the probable gotchas):
interface Collection <E> {
...
public boolean addAll(Collection<? extends E> c);
...
}
Why can’t the above be written as:
interface Collection <E> {
...
public boolean addAll(Collection<T extends E> c);
...
}
What is the difference? Is it just the language restriction or is there any difference under the hood?
It could be written as
but there would be no point. There’s no need to name that parameter.