我遇到编译错误 The method getRecommendedIds(String, Object&Comparable<?>&Serializable[]) is ambiguous for the type MyService
尝试调用使用泛型和可变参数的重载方法时。
服务:
public interface MyService {
public <K> List<K> getRecommendedIds(String datasource, K... ids);
public <K> List<K> getRecommendedIds(String datasource, int limit, K... ids);
}
电话:
@Test(expected = NullPointerException.class)
public void testGetWithLimitThrowsNpeForNullDatasource() {
service.getRecommendedIds(null, 3, UUID.randomUUID());
}
有什么办法解决这个问题吗?
最佳答案
因为 K 变量不受限制,所以调用确实有歧义 - 它可能是对三参数版本的调用,也可能是对 (String, K...)
3 自动装箱为 Integer
和 K
绑定(bind)到 Object
的版本。如果你称它为
service.<UUID>getRecommendedIds(null, 3, UUID.randomUUID());
对于 K 的显式绑定(bind)它会起作用,因为 int
和 Integer
都不能分配给 UUID
类型,所以调用必须是到三个 arg 版本。如果您将调用的返回值分配给限制类型的变量,您也可以在没有显式绑定(bind)的情况下逃脱,即
List<UUID> ids = service.getRecommendedIds(null, 3, UUID.randomUUID());
此处编译器必须将K
绑定(bind)到UUID
以使返回类型匹配。
关于java - 使用 Generic VarArgs 在 Java 中进行不明确的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12279259/