Comparable.java
package cm.it04;
public interface Comparable {
int compareTo(Object other);
}
Employee.java
package cm.it04;
public class Employee implements Comparable {
private String name;
private double salary;
//构造方法
public Employee() {
}
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
//get,set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
//重写compareTo方法
@Override
public int compareTo(Object otherObject) {
Employee other = (Employee) otherObject;
return Double.compare(salary, other.salary);
}
}
EmployeeSortTest.java
package cm.it04;
import java.util.Arrays;
public class EmployeeSortTest {
public static void main(String[] args) {
Employee[] staff = new Employee[3];
staff[0] = new Employee("apple", 3000);
staff[1] = new Employee("pear", 2000);
staff[2] = new Employee("banana", 4000);
Arrays.sort(staff);
for (Employee e : staff) {
System.out.println(e.getName() + ":" + e.getSalary());
}
}
}
报错
Exception in thread "main" java.lang.ClassCastException: class cm.it04.Employee cannot be cast to class java.lang.Comparable (cm.it04.Employee is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')
at java.base/java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
at java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:188)
at java.base/java.util.Arrays.sort(Arrays.java:1249)
at cm.it04.EmployeeSortTest.main(EmployeeSortTest.java:18)
解决方法
这是类转换异常的问题。解决方法如下:
Employee.java
public class Employee implements Comparable {
private String name;
private double salary;
public Employee() {
}
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public int compareTo(Object otherObject) {
Employee other = (Employee) otherObject;
double num1 = Double.compare(this.salary, other.salary);
//salary相同的情况下按照姓名进行排序
double num2 = num1 == 0 ? this.name.compareTo(other.name) : num1;
return (int) num2;
}
}
EmployeeSortDemo.java
import java.util.Arrays;
import java.util.TreeSet;
public class EmployeeSortTest {
public static void main(String[] args) {
TreeSet<Employee> ts = new TreeSet<Employee>();
Employee e1 = new Employee("apple", 3000);
Employee e2 = new Employee("pear", 2000);
Employee e3 = new Employee("banana", 4000);
ts.add(e1);
ts.add(e2);
ts.add(e3);
for (Employee e : ts) {
System.out.println(e.getName() + ":" + e.getSalary());
}
}
}