Java中使用泛型VarArgs的方法调用不明确

Java中使用泛型VarArgs的方法调用不明确,java,generics,variadic-functions,Java,Generics,Variadic Functions,当试图调用使用泛型和varargs的重载方法时,我得到了一个编译错误,getRecommendedDS(String、Object&Comparable&Serializable[])对于MyService类型是不明确的 服务: public interface MyService { public <K> List<K> getRecommendedIds(String datasource, K... ids); public <K> Li

当试图调用使用泛型和varargs的重载方法时,我得到了一个编译错误
,getRecommendedDS(String、Object&Comparable&Serializable[])对于MyService类型是不明确的

服务:

public interface MyService {
    public <K> List<K> getRecommendedIds(String datasource, K... ids);
    public <K> List<K> getRecommendedIds(String datasource, int limit, K... ids);
}

有没有办法解决这个问题?

因为K变量没有边界,所以调用实际上是不明确的-它可能是对三参数版本的调用,也可能是对
(字符串,K…)
版本的调用,其中3个自动框作为
整数
K
绑定到
对象
。如果你称之为

service.<UUID>getRecommendedIds(null, 3, UUID.randomUUID());

在这里,编译器必须将
K
绑定到
UUID
,以使返回类型匹配。

谢谢!我试着切换int和String参数,这很有效,但我真的不明白为什么!有什么想法吗?因为这样就不再模棱两可了——这两种方法的区别在于它们的第一个参数不是类型变量(它是
int
String
)。啊,是的,仔细考虑这一点很有意义:)
service.<UUID>getRecommendedIds(null, 3, UUID.randomUUID());
List<UUID> ids = service.getRecommendedIds(null, 3, UUID.randomUUID());