Java:泛型方法重载歧义
请考虑以下代码:
public class Converter {
public <K> MyContainer<K> pack(K key, String[] values) {
return new MyContainer<>(key);
}
public MyContainer<IntWrapper> pack(int key, String[] values) {
return new MyContainer<>(new IntWrapper(key));
}
public static final class MyContainer<T> {
public MyContainer(T object) { }
}
public static final class IntWrapper {
public IntWrapper(int i) { }
}
public static void main(String[] args) {
Converter converter = new Converter();
MyContainer<IntWrapper> test = converter.pack(1, new String[]{"Test", "Test2"});
}
}
上面的代码编译没有问题。但是,如果同时在签名和 中都更改为 ,编译器会抱怨调用是不明确的。String[]
String...
pack
new String[]{"Test", "Test2"}
"Test", "Test2"
converter.pack
现在,我可以理解为什么它可以被认为是模棱两可的(可以自动装箱到一个,从而符合或缺乏条件)。但是,我无法理解的是,如果您使用而不是.,为什么不存在歧义。int
Integer
K
String[]
String...
有人可以解释一下这种奇怪的行为吗?