2016-12-17 91 views
0

我想寫泛型和通配符

public static Comparable<? extends Comparable> getMax (ArrayList <? extends Comparable> list) 

,我收到一個異常

  • 可比是原始類型。引用泛型類型可比應該是 參數

我該怎麼辦?我想收到一個集合並返回一個實現接口的可變參數

回答

0

如果您想查找列表中的最大值,爲什麼返回Comparable?返回T其中T是列表存儲的對象類型要好得多。

另外,這裏不應該使用通配符。如果你寫你的方法是這樣的:

public static Comparable<? extends Comparable> getMax (ArrayList <? extends Comparable> list) 

那麼客戶端代碼可以通過ArrayList<Integer>,你可以返回String這是沒有意義的。

爲了避免這種情況,我建議你使用泛型類型T

public static <T extends Comparable<T>> T getMax (ArrayList<T> list) { 
    return list.stream().max(Comparable::compareTo).orElse(null); 
} 
+0

是最普遍使用'>' – newacct