簡體   English   中英

使用Generic VarArgs在Java中調用Ambiguous方法

[英]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的顯式綁定它將起作用,因為intInteger都不能分配給UUID類型,因此調用必須是三個arg版本。 如果您將調用的返回值分配給限制類型的變量,也可以在沒有顯式綁定的情況下離開,即

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

這里編譯器必須將K綁定到UUID以使返回類型匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM