这里的第一个计时器,这里有一个问题Java代码: import java.util。*;
public class Pootis
{
public static void main(String[] args)
{
Superhero batman = new Superhero("Bruce", 26, "Batman");
Human rachel = new Human("Rachel", 24);
Superhero ironman = new Superhero("Tony", 35, "Ironman");
Human pepper = new Human("Pepper", 22);
List<Human> people = new ArrayList<>();
people.add(batman);
people.add(rachel);
people.add(ironman);
people.add(pepper);
Collections.sort(people);//<-----
}
}
此程序的目的是按年龄对人员ArrayList中的人员进行排序。我正在使用类似的界面。问题似乎是在调用Collections.sort(人员)时。我做错了什么?? 这是第二堂课:
public class Human implements Comparable<Human> {
private int age;
private String name;
public Human(String givenName, int age) {
this.name = givenName;
this.age = age;
}
@Override
public int compareTo(Human other){
if(getAge() > other.getAge()){
return 1;
}
else if(getAge() < other.getAge()){
return -1;
}
return 0;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
这是错误:
Pootis.java:65:错误:找不到合适的排序方法(列表) Collections.sort(人); ^ 方法Collections.sort(List,Comparator)不适用 (无法从参数实例化,因为实际和形式参数列表的长度不同) 方法Collections.sort(List)不适用 (推断类型不符合声明的界限) 推断:对象 bound(s):可比较) 其中T#1,T#2是类型变量: T#1扩展了在方法排序中声明的Object(List,Comparator) T#2扩展了方法排序(List)中声明的Comparable 1错误
这是超级英雄课程:
public class Superhero {
String alterEgo, name;
int age;
public Superhero(String givenName, int age, String alterEgo) {
super();
this.alterEgo = alterEgo;
this.name = givenName;
this.age = age;
}
public String getAlterEgo() {
return alterEgo;
}
public String introduce() {
return "Hey! I'm " + name + " and I'm " + age + " years old. I'm also known as" + alterEgo + "!";
}
}
答案 0 :(得分:1)
Collections.sort()
的签名是:
public static <T extends Comparable<? super T>> void sort(List<T> list)
这意味着您只能在sort
个对象列表上调用Comparable
。使用List<Object>
无效,因为Object
不是Comparable
。 <{1}}超载
sort()
但这不适用于您的方法调用,因为您只提供了一个参数。
请记住,根据javadoc,为了使用public static <T> void sort(List<T> list,
Comparator<? super T> c)
对列表进行排序,所有元素必须相互比较。在您的情况下,这意味着您应该有一种方法可以将Collections.sort()
与Human
进行比较。另外,如果Superhero
,您的列表应声明为Superhero extends Human
(或反之亦然)。
答案 1 :(得分:0)
如果Superhero
延长Human
,您的列表应该是
List<Human> persons = new ArrayList<>();
因为如果您以其他方式执行此操作,则列表中的对象属于Object
类型,因此无法进行比较,因为compareTo
中已覆盖Human