在Java中使用Comparator时不可编译的源代码
尝试运行此小程序时出现以下错误:在Java中使用Comparator时不可编译的源代码,java,comparator,Java,Comparator,尝试运行此小程序时出现以下错误: Exception in thread "main" java.lang.ExceptionInInitializerError at MainClass.main(Person.java:120) Caused by: java.lang.RuntimeException: Uncompilable source code - FirstNameComparator is not abstract and does not override abstr
Exception in thread "main" java.lang.ExceptionInInitializerError
at MainClass.main(Person.java:120)
Caused by: java.lang.RuntimeException: Uncompilable source code - FirstNameComparator is not abstract and does not override abstract method compare(java.lang.Object,java.lang.Object) in java.util.Comparator
at FirstNameComparator.<clinit>(Person.java:71)
... 1 more
Java Result: 1
LastNameComparator.java
class LastNameComparator implements Comparator {
public int compareTo(Object person, Object AnotherPerson) {
String lastName1 = ((Person)person).getLastName().toUpperCase();
String firstName1= ((Person)person).getFirstName().toUpperCase();
String lastName2 = ((Person)person).getLastName().toUpperCase();
String firstName2 = ((Person)person).getFirstName().toUpperCase();
if(lastName1.equals(lastName2)) {
return firstName1.compareTo(firstName2);
}else {
return lastName1.compareTo(lastName2);
}
}
}
class FirstNameComparator implements Comparator {
public int compareTo(Object person, Object anotherPerson) {
String lastName1 = ((Person)person).getLastName().toUpperCase();
String firstName1 = ((Person)person).getFirstName().toUpperCase();
String lastName2 = ((Person) person).getLastName().toUpperCase();
String firstName2 = ((Person) person).getFirstName().toUpperCase();
if(firstName1.equals(lastName1)) {
return lastName1.compareTo(lastName2);
}else {
return firstName1.compareTo(firstName2);
}
}
}
FirstNameComparator.java
class LastNameComparator implements Comparator {
public int compareTo(Object person, Object AnotherPerson) {
String lastName1 = ((Person)person).getLastName().toUpperCase();
String firstName1= ((Person)person).getFirstName().toUpperCase();
String lastName2 = ((Person)person).getLastName().toUpperCase();
String firstName2 = ((Person)person).getFirstName().toUpperCase();
if(lastName1.equals(lastName2)) {
return firstName1.compareTo(firstName2);
}else {
return lastName1.compareTo(lastName2);
}
}
}
class FirstNameComparator implements Comparator {
public int compareTo(Object person, Object anotherPerson) {
String lastName1 = ((Person)person).getLastName().toUpperCase();
String firstName1 = ((Person)person).getFirstName().toUpperCase();
String lastName2 = ((Person) person).getLastName().toUpperCase();
String firstName2 = ((Person) person).getFirstName().toUpperCase();
if(firstName1.equals(lastName1)) {
return lastName1.compareTo(lastName2);
}else {
return firstName1.compareTo(firstName2);
}
}
}
MainClass.java
class MainClass {
public static void main(String[] args) {
Person[] persons = new Person[4];
persons[0] = new Person();
persons[0].setFirstName("Asaftei");
persons[0].setLastName("Ionut");
persons[0].setAge(25);
persons[1] = new Person();
persons[1].setFirstName("Binoclu");
persons[1].setLastName("Telescop");
persons[1].setAge(10);
persons[2] = new Person();
persons[2].setFirstName("Morcov");
persons[2].setLastName("Castravete");
persons[2].setAge(33);
persons[3] = new Person();
persons[3].setFirstName("Rosie");
persons[3].setLastName("Ardei");
persons[3].setAge(55);
System.out.println("Natural Order : ");
for(int counter =0; counter<=3; counter++) {
Person person = persons[counter];
String lastName=person.getLastName();
String firstName=person.getFirstName();
int age = person.getAge();
System.out.println(lastName+ ", " +firstName+ " , "+age);
}
Arrays.sort(persons, new FirstNameComparator());
System.out.println();
System.out.println("Sorted by First Name: ");
for(int counter=0; counter<=3; counter++) {
Person person = persons[counter];
String lastName = person.getLastName();
String firstName = person.getFirstName();
int age = person.getAge();
System.out.println(lastName+ ", " +firstName+ ", " +age );
}
Arrays.sort(persons, new LastNameComparator());
System.out.println();
System.out.println("Sorted by Last Name"); for(int counter=0; counter<=3; counter++) {
Person person = persons[counter];
String lastName = person.getLastName().toUpperCase();
String firstName = person.getFirstName().toUpperCase();
int age = person.getAge();
System.out.println(lastName +", "+firstName+", "+age);
}
}
}
class类main类{
公共静态void main(字符串[]args){
人员[]人员=新人员[4];
人员[0]=新人员();
人员[0]。setFirstName(“Asaftei”);
人员[0]。setLastName(“Ionut”);
人[0],集龄(25);
人员[1]=新人员();
人员[1]。setFirstName(“Binoclu”);
人员[1]。setLastName(“望远镜”);
人[1]。设置(10);
人员[2]=新人员();
人员[2]。setFirstName(“Morcov”);
人员[2]。setLastName(“卡斯特拉维特”);
人[2]。设置(33);
人员[3]=新人员();
人员[3]。setFirstName(“Rosie”);
人员[3]。setLastName(“Ardei”);
人[3]。年龄(55岁);
System.out.println(“自然顺序:”);
对于(int counter=0;counters,需要实现该方法,而不是compareTo
方法
例如,您的FirstNameComparator
应该如下所示:
class FirstNameComparator implements Comparator {
@Override
public int compare(Object person, Object anotherPerson) {
// implementation
}
}
@Override
public int compareTo(Person other) {
return Intger.compare(this.getAge(), other.getAge());
}
请注意,由于此比较器
用于比较个人
实例,因此最好使用泛型语法并将其定义为:
class FirstNameComparator implements Comparator<Person> {
@Override
public int compare(Person person, Person anotherPerson) {
// implementation
}
}
类FirstNameComparator实现Comparator{
@凌驾
公共整数比较(个人、个人和其他人){
//实施
}
}
别忘了接受。
因此,使用实现可比较的。这意味着您可以比较两个人
此外,不允许重写方法向该方法添加其他抛出。请参阅
新的定义应该是这样的:
class FirstNameComparator implements Comparator {
@Override
public int compare(Object person, Object anotherPerson) {
// implementation
}
}
@Override
public int compareTo(Person other) {
return Intger.compare(this.getAge(), other.getAge());
}
在实现接口时,请确保始终使用注释。如果您意外地重写了错误的方法,则会出现明显的编译错误。Eclipse之类的IDE也可以配置为在您忘记注释时向您发出警告。还要注意,您的比较器从不使用另一个人
——另一个错误Eclipse将向您发出警告u关于。非常感谢。我使用了@Override注释,并将compareTo更改为compare。这解决了我的问题。现在它工作正常,没有错误。非常感谢大家!!!谢谢。这解决了我的问题。现在,将compareTo更改为compare后,一切正常。:)谢谢。在阅读了本页的答案后,一切都清楚了。