language: Java7 (sun-jdk-1.7.0_10)
date: 222 days 12 hours ago
link:
visibility: public
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 ) ;
    }
}
 
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