Some times, well a lot of times I see this thing occurring in the documentation. It leaves me wondering what to type. Could someone explain to me the meaning of this in clear dumbed down text :D. How this:
ArrayList(Collection<? extends E> c)
end up to be used as this:
new ArrayList<>(Arrays.asList("a","b","c"));
so I don't need to ask this "question" anymore by googling it, but being able to figure it out by myself.
The syntax ? extends E
means "some type that either is E or a subtype of E". The ?
is a wildcard.
The code Arrays.asList("a","b","c")
is inferred to return a List<String>
, and new ArrayList<>
uses the diamond operator, so that yields an ArrayList<String>
.
The wildcard allows you to infer a subtype -- you could assign it to a reference variable with a supertype:
List<CharSequence> list = new ArrayList<>(Arrays.asList("a","b","c"));
Here, E
is inferred as CharSequence
instead of String
, but that works, because String
is a subtype of CharSequence
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With