示例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
,但不适用于传递给process
的第二个实际参数吗?
示例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
}
}
同样的问题:为什么它不能编译?
我希望Collections.emptySet()
可以适用于任何参数化的Set
类型。