我在尝试调用使用泛型和变量的重载方法时遇到编译错误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());
}
有什么方法吗?
答案 0 :(得分:3)
因为K变量没有限制,所以调用确实是模糊的 - 它可能是对三参数版本的调用,或者它可能是对(String, K...)
版本的调用,其中3自动装箱为{{ 1}}和Integer
绑定到K
。如果你把它称为
Object
使用K的显式绑定它将起作用,因为service.<UUID>getRecommendedIds(null, 3, UUID.randomUUID());
和int
都不能分配给Integer
类型,因此调用必须是三个arg版本。如果您将调用的返回值分配给限制类型的变量,也可以在没有显式限制的情况下逃脱,即
UUID
此处编译器必须将List<UUID> ids = service.getRecommendedIds(null, 3, UUID.randomUUID());
绑定到K
以使返回类型匹配。