KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Is the Java compiler able to infer the type of a generic static function from its context as the argument to another generic static function? For example, I have a simple Pair class: public class Pair<F, S> { private final F mFirst; private final S mSecond; public Pair(F first, S second) { mFirst = checkNotNull(first); mSecond = checkNotNull(second); } public static <F, S, F1 extends F, S1 extends S> Pair<F, S> of(F1 first, S1 second) { return new Pair<F, S>(first, second); } public F first() { return mFirst; } public S second() { return mSecond; } // ... } And I have the following generic static function: public static <F, P extends Pair<F, ?>> Function<P, F> deferredFirst() { return (Function<P, F>)DEFERRED_FIRST; } private static final Function<Pair<Object, ?>, Object> DEFERRED_FIRST = new Function<Pair<Object,?>, Object>() { @Override public Object apply(Pair<Object, ?> input) { return input.first(); } }; Which I wish to use as follows ( Collections2.transform is from Google Guava ): List<Pair<Integer, Double>> values = ... Collection<Integer> firsts = Collections2.transform(values, Pair.deferredFirst()); To which the compiler complains: The method transform(Collection<F>, Function<? super F,T>) in the type Collections2 is not applicable for the arguments (List<Pair<Integer,Double>>, Function<Pair<Object,?>,Object>) So it seems that the compiler fa
Tags (comma-separated)
Save Edits
Cancel