所以只需编写一个抽象类和接口程序。我的代码到目前为止:
package lesson8;
import java.util.Collections;
public class ShapeTest {
public static void main(String[] args) {
Object[] shape = {new Square(4),
new Rectangle(3, 2),
new RightTriangle(5,2),
new Square(2),
new RightTriangle(2, 4),
new Plus(3)};
Collections.sort(shape);
}
}
我的问题是,为什么Collection.sort()不能与Object []一起使用?我怎么能让它发挥作用?谢谢!
答案 0 :(得分:4)
您需要使用Arrays.sort()
对数组进行排序(就地)。而且,没有"自然"排序Object
,因此您必须将Comparator<Object>
传递给带有比较器的Arrays.sort()
的重载版本,除非Object
全部实现Comparable
根据{{3}},所有人都可以相互比较。
答案 1 :(得分:1)
首先,Collections.sort()
期望Collection
作为参数,而不是数组。对于数组,您有Arrays.sort()
。
其次,为了使Collection.sort()
或Arrays.sort()
分别适用于Collection
或Object
的数组,所有这些对象必须与每个对象相当其他 - 他们必须实现Comparable
界面,而e1.compareTo(e2)
不得为ClassCastException
或数组的每两个元素抛出Collection
。
答案 2 :(得分:0)
您还可以使用apache commons beanutils中的 BeanComparator ,如下所示:
Collections.sort(personList, new BeanComparator("name"));
答案 3 :(得分:0)
Collections.sort通过调用数组中对象的compareTo
方法来工作,以确定对象的自然顺序。但是,类Object没有定义的compareTo
方法,因此sort方法无法知道正确的顺序是什么。因此,它无法对列表进行排序。
如果要使用Collections.sort
对列表进行排序,请确保所有包含的对象都定义了compareTo
方法。