import java.util.Set;
public class Main {
interface Foo<T> { }
interface SubFoo<T> extends Foo<T> { }
static class Bar { }
public static void main
(String[] args
) {
Set<Foo<?>> arg1 = null;
Set<SubFoo<?>> arg2 = null;
Set<Foo<Bar>> arg3 = null;
Set<SubFoo<Bar>> arg4 = null;
Set<Foo<?>> inflexibleParam;
inflexibleParam = arg1; //success
inflexibleParam = arg2; //incompatible types
inflexibleParam = arg3; //incompatible types
inflexibleParam = arg4; //incompatible types
Set<? extends Foo<?>> flexibleParam;
flexibleParam = arg1; //success
flexibleParam = arg2; //success
flexibleParam = arg3; //success
flexibleParam = arg4; //success
}
}
CmltcG9ydCBqYXZhLnV0aWwuU2V0OwoKcHVibGljIGNsYXNzIE1haW4gewogICAgCiAgICBpbnRlcmZhY2UgRm9vPFQ+IHsgfQogICAgCiAgICBpbnRlcmZhY2UgU3ViRm9vPFQ+IGV4dGVuZHMgRm9vPFQ+IHsgfQogICAgCiAgICBzdGF0aWMgY2xhc3MgQmFyIHsgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgCiAgICAgICAgU2V0PEZvbzw/Pj4gYXJnMSA9IG51bGw7CiAgICAgICAgU2V0PFN1YkZvbzw/Pj4gYXJnMiA9IG51bGw7CiAgICAgICAgU2V0PEZvbzxCYXI+PiBhcmczID0gbnVsbDsKICAgICAgICBTZXQ8U3ViRm9vPEJhcj4+IGFyZzQgPSBudWxsOwogICAgICAgIAogICAgICAgIFNldDxGb288Pz4+IGluZmxleGlibGVQYXJhbTsKICAgICAgICBpbmZsZXhpYmxlUGFyYW0gPSBhcmcxOyAvL3N1Y2Nlc3MKICAgICAgICBpbmZsZXhpYmxlUGFyYW0gPSBhcmcyOyAvL2luY29tcGF0aWJsZSB0eXBlcwogICAgICAgIGluZmxleGlibGVQYXJhbSA9IGFyZzM7IC8vaW5jb21wYXRpYmxlIHR5cGVzCiAgICAgICAgaW5mbGV4aWJsZVBhcmFtID0gYXJnNDsgLy9pbmNvbXBhdGlibGUgdHlwZXMKICAgICAgICAKICAgICAgICBTZXQ8PyBleHRlbmRzIEZvbzw/Pj4gZmxleGlibGVQYXJhbTsKICAgICAgICBmbGV4aWJsZVBhcmFtID0gYXJnMTsgLy9zdWNjZXNzCiAgICAgICAgZmxleGlibGVQYXJhbSA9IGFyZzI7IC8vc3VjY2VzcwogICAgICAgIGZsZXhpYmxlUGFyYW0gPSBhcmczOyAvL3N1Y2Nlc3MKICAgICAgICBmbGV4aWJsZVBhcmFtID0gYXJnNDsgLy9zdWNjZXNzCiAgICB9Cn0=
Main.java:21: error: incompatible types
inflexibleParam = arg2; //incompatible types
^
required: Set<Foo<?>>
found: Set<SubFoo<?>>
Main.java:22: error: incompatible types
inflexibleParam = arg3; //incompatible types
^
required: Set<Foo<?>>
found: Set<Foo<Bar>>
Main.java:23: error: incompatible types
inflexibleParam = arg4; //incompatible types
^
required: Set<Foo<?>>
found: Set<SubFoo<Bar>>
3 errors