Изучите следующий фрагмент:
public class ExampleA {
static class Pair<F,S> { }
static <F,S> Pair<F,S> anyPair() { return null; }
static <F,S> void process(Pair<F,S> p1, Pair<F,S> p2) { return; }
public static void main(String[] args) {
Pair<String,Integer> p = anyPair();
process(p, anyPair()); // doesn't compile
}
}
Может кто-нибудь объяснить, почему вывод типа работает для присвоения локальной переменной p
, но не для второй фактический параметр процесса
?
Возможно, это проще понять:
public class ExampleB {
public static <E> void process(Set<E> s1, Set<E> s2) { return; }
public static void main(String[] args) {
process(new HashSet<String>(), Collections.emptySet()); // doesn't compile
}
}
Тот же вопрос: почему он не компилируется?
I ' Я надеюсь, что Collections.emptySet ()
будет работать только для ЛЮБОГО параметризованного типа Set
.