fork(1) download
  1. import java.util.*;
  2.  
  3. class TypeToken<T> {
  4. static <T> TypeToken<? extends T> extendsType(Class<T> type) {return null;}
  5. static <T> TypeToken<List<T>> list(TypeToken<T> type) {return null;}
  6. static void wat() {
  7. TypeToken<List<? extends Number>> a = new TypeToken<List<? extends Number>>() {}; // valid
  8. TypeToken<List<? extends Number>> b = list(extendsType(Number.class)); // invalid, why?
  9. TypeToken<? extends List<? extends Number>> c = list(extendsType(Number.class)); // valid, why?
  10. }
  11. public static void main(String[] args) {
  12. }
  13. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:8: error: incompatible types: no instance(s) of type variable(s) T#1,CAP#1,T#2 exist so that TypeToken<List<T#1>> conforms to TypeToken<List<? extends Number>>
        TypeToken<List<? extends Number>> b = list(extendsType(Number.class)); // invalid, why?
                                                  ^
  where T#1,T#2 are type-variables:
    T#1 extends Object declared in method <T#1>list(TypeToken<T#1>)
    T#2 extends Object declared in method <T#2>extendsType(Class<T#2>)
  where CAP#1 is a fresh type-variable:
    CAP#1 extends T#2 from capture of ? extends T#2
1 error
stdout
Standard output is empty