fork download
  1.  
  2. import java.util.Set;
  3.  
  4. public class Main {
  5.  
  6. interface Foo<T> { }
  7.  
  8. interface SubFoo<T> extends Foo<T> { }
  9.  
  10. static class Bar { }
  11.  
  12. public static void main(String[] args) {
  13.  
  14. Set<Foo<?>> arg1 = null;
  15. Set<SubFoo<?>> arg2 = null;
  16. Set<Foo<Bar>> arg3 = null;
  17. Set<SubFoo<Bar>> arg4 = null;
  18.  
  19. Set<Foo<?>> inflexibleParam;
  20. inflexibleParam = arg1; //success
  21. inflexibleParam = arg2; //incompatible types
  22. inflexibleParam = arg3; //incompatible types
  23. inflexibleParam = arg4; //incompatible types
  24.  
  25. Set<? extends Foo<?>> flexibleParam;
  26. flexibleParam = arg1; //success
  27. flexibleParam = arg2; //success
  28. flexibleParam = arg3; //success
  29. flexibleParam = arg4; //success
  30. }
  31. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
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
stdout
Standard output is empty