在Java中对未知类型的列表进行排序

时间:2017-02-23 10:43:59

标签: java sorting generics java-8

我在方法中有这个列表:

List<?> objects;

或者它也可以:

objects.sort((p1, p2) -> p1.compareTo(p2));

我想用这种方式对它进行排序,使用Java 8 lambda:

List<O extends Object> objects;

但它说:

  

方法compareTo(捕获#6-of?)未定义类型   捕获#6-of?

我也尝试过泛型类型:

{{1}}

然后它说:

  

对于类型O

,方法compareTo(O)未定义

我怎么能像这样排序列表?我需要它在我的抽象类中,它通过反射识别列表字段,并且可以对其进行排序。

2 个答案:

答案 0 :(得分:8)

compareTo可用于实现Comparable接口的对象。 如果你想这样做,你应该使用

List<? extends Comparable> objects;

要获得干净的代码,请查看@Holger的答案

答案 1 :(得分:5)

如果您有信心,列表中的所有元素都是可以相互比较的,也就是说,它们不仅实现了Comparable,还实现了Comparable<CommonBaseType>,例如虽然StringInteger个实例为Comparable,但您无法将StringInteger进行比较,且您的列表中不得包含这两种类型的实例,然后你可以使用

绕过编译时检查
objects.sort(null);

当然,包括绕过编译时类型检查的所有后果。