2016-12-17 92 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