Consider the following example,
List<? super Number> list1 = new ArrayList<>();
list1.add(10);
list1.add(10.10);
list1.add(20.20d);
and another list to which i assign list1
List<? super Integer> list = list1;
System.out.println(list.toString());
Now, when i print the list it contains double values also BUT the list is only supposed to hold Integer and anything above Integer .
If the above is fine then shouldn't the following compile as well ?
list.add(30.30);
Everything makes sense if you consider the possible things you could assign to it.
List<? super Number> list1 = new ArrayList<Object>(); // works
List<? super Number> list1 = new ArrayList<Number>(); // works
List<? super Number> list1 = new ArrayList<Integer>(); // doesn't work
Anything that works on the right hand side will accept a Double
.
List<? super Integer> list = new ArrayList<Object>(); // works
List<? super Integer> list = new ArrayList<Number>(); // works
List<? super Integer> list = new ArrayList<Integer>(); // works
Anything that you could assign to list1
you could also assign to list
. So list = list1
works just fine. But not all of the things you could assign to list
will accept a Double
, so it doesn't compile.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.