Java Generics Wildcard bounding cannot set -
i have following classes.
public class basket<e> { private e element; public void setelement(e x) { element = x; } public e getelement() { return element; } } class fruit {} class apple extends fruit {} class orange extends fruit {}
my confusion comes when consider following cases.
basket<? extends fruit> basket = new basket<>(); basket.setelement(new apple()); // cannot set
and
basket<fruit> basket = new basket<>(); basket.setelement(new apple()); // okay!
if ? extends fruit
means can pass @ least fruit
(or implements or extends), why cannot pass in apple
type? cannot see difference between 2 cases if passing apple
type in second case works because apple
descendant of fruit
...
basket<? extends fruit>
not mean basket can hold object long subtype of fruit
. means basket of unknown type t
extending fruit
. example basket<apple>
, basket<orange>
or basket<fruit>
. because basket<orange>
, can't set item apple
.
basket<fruit>
basket of fruit
. fruit do.
Comments
Post a Comment