Сбой при выводе общего типа?

Пример A

Изучите следующий фрагмент:

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 , но не для второй фактический параметр процесса ?


Пример B

Возможно, это проще понять:

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 .

8
задан polygenelubricants 10 November 2010 в 22:51
поделиться