Passing generic function to a generic method

Viewed 37

I have a piece code that fails to compile, and I cannot seem to understand why.

public class Main {

    public static void main(String[] args) {
      lookupStuff(Main::lookup);
    }

    private static <T> void lookupStuff(Function<Class<T>,T> locator) {
       Integer i = locator.apply(Integer.class);
       String s = locator.apply(String.class);
    }

    private static <T> T lookup(Class<T> cls) {
       return null; // do some lookup
    }
}

Compiler fails with:

    Error:(12, 42) java: incompatible types: java.lang.Class<java.lang.Integer> cannot be converted to java.lang.Class<T>
    Error:(13, 40) java: incompatible types: java.lang.Class<java.lang.String> cannot be converted to java.lang.Class<T>
0 Answers
Related