1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | // source http://stackoverflow.com/q/12894335/348975 import java.util.List; import java.util.ArrayList; class Main { public static void main ( String [ ] args ) { } } interface Canine {} class Dog implements Canine {} class Collie extends Dog { public static void main(String[] args){ List<Dog> d = new ArrayList<Dog>(); List<Collie> c = new ArrayList<Collie>(); d.add(new Collie()); c.add(new Collie()); do1(d); do1(c); do2(d); do2(c); } static void do1(List<? extends Dog> d2){ // d2.add(new Collie()); System.out.print(d2.size()); } static void do2(List<? super Collie> c2){ c2.add(new Collie()); System.out.print(c2.size()); System . out . println ( c2 . get ( 0 ) ) ; // works ok Collie collie = c2 . get ( 0 ) ; // compiler error ... no access System . out . println ( collie ) ; } } |
Ci8vIHNvdXJjZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xMjg5NDMzNS8zNDg5NzUKCmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CgpjbGFzcyBNYWluCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluICggU3RyaW5nIFsgXSBhcmdzICkKCXsKCX0KfQoKaW50ZXJmYWNlIENhbmluZSB7fQpjbGFzcyBEb2cgaW1wbGVtZW50cyBDYW5pbmUge30KY2xhc3MgQ29sbGllIGV4dGVuZHMgRG9nIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpewogICAgICAgIExpc3Q8RG9nPiBkID0gbmV3IEFycmF5TGlzdDxEb2c+KCk7CiAgICAgICAgTGlzdDxDb2xsaWU+IGMgPSBuZXcgQXJyYXlMaXN0PENvbGxpZT4oKTsKICAgICAgICBkLmFkZChuZXcgQ29sbGllKCkpOwogICAgICAgIGMuYWRkKG5ldyBDb2xsaWUoKSk7CiAgICAgICAgZG8xKGQpOyBkbzEoYyk7CiAgICAgICAgZG8yKGQpOyBkbzIoYyk7CiAgICB9CiAgICBzdGF0aWMgdm9pZCBkbzEoTGlzdDw/IGV4dGVuZHMgRG9nPiBkMil7CiAvLyAgICAgICBkMi5hZGQobmV3IENvbGxpZSgpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50KGQyLnNpemUoKSk7CiAgICB9CiAgICBzdGF0aWMgdm9pZCBkbzIoTGlzdDw/IHN1cGVyIENvbGxpZT4gYzIpewogICAgICAgIGMyLmFkZChuZXcgQ29sbGllKCkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnQoYzIuc2l6ZSgpKTsKICAgICAgICBTeXN0ZW0gLiBvdXQgLiBwcmludGxuICggYzIgLiBnZXQgKCAwICkgKSA7IC8vIHdvcmtzIG9rIAogICAgICAgIENvbGxpZSBjb2xsaWUgPSBjMiAuIGdldCAoIDAgKSA7IC8vIGNvbXBpbGVyIGVycm9yIC4uLiBubyBhY2Nlc3MKCVN5c3RlbSAuIG91dCAuIHByaW50bG4gKCBjb2xsaWUgKSA7CiAgICB9Cn0K
Main.java:33: error: incompatible types
Collie collie = c2 . get ( 0 ) ; // compiler error ... no access
^
required: Collie
found: CAP#1
where CAP#1 is a fresh type-variable:
CAP#1 extends Object super: Collie from capture of ? super Collie
1 error
-
result: Compilation error (maybe you wish to see an example for Java7)


