[英]Ambiguous Method call in Java with Generic VarArgs
我收到編譯錯誤當嘗試調用使用泛型和變量的重載方法時, 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
綁定到Object
。 如果你把它稱為
service.<UUID>getRecommendedIds(null, 3, UUID.randomUUID());
使用K的顯式綁定它將起作用,因為int
和Integer
都不能分配給UUID
類型,因此調用必須是三個arg版本。 如果您將調用的返回值分配給限制類型的變量,也可以在沒有顯式綁定的情況下離開,即
List<UUID> ids = service.getRecommendedIds(null, 3, UUID.randomUUID());
這里編譯器必須將K
綁定到UUID
以使返回類型匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.