考虑以下代码:
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...
.
有人可以解释这种奇怪的行为吗?