使用sort方法编译Java错误

bou*_*pat 0 java sorting

我遇到了这个错误:无法找到符号 - 方法排序(java.util.ArrayList)

我正在尝试对ArrayList进行排序并打印它.

这是代码,我也覆盖了HockeyPlayer,Professor,Parent和GasStation类中的compareTo方法.谢谢.P

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Collections;
/**
 * Class Employees.
 */
public class Employees
{
    private ArrayList<Employee> employeeList;

    /**
     * Constructor for objects of class Employees
     */
    public Employees()
    {
        employeeList = new ArrayList<Employee>();
        //Creating 5 each types of Employees
        employeeList.add(new HockeyPlayer("Wayne Gretzky", 894));
        employeeList.add(new HockeyPlayer("Who Ever", 0));
        employeeList.add(new HockeyPlayer("Brent Gretzky", 1));
        employeeList.add(new HockeyPlayer("Pavel Bure", 437));
        employeeList.add(new HockeyPlayer("Jason Harrison", 0));

        employeeList.add(new Professor("Albert Einstein", "Physics"));
        employeeList.add(new Professor("Jason Harrison", "Computer Systems"));
        employeeList.add(new Professor("Richard Feynman", "Physics"));
        employeeList.add(new Professor("BCIT Instructor", "Computer Systems"));
        employeeList.add(new Professor("Kurt Godel", "Logic"));

        employeeList.add(new Parent("Tiger Woods", 1));
        employeeList.add(new Parent("Super Mom", 168));
        employeeList.add(new Parent("Lazy Larry", 20));
        employeeList.add(new Parent("Ex Hausted", 168));
        employeeList.add(new Parent("Super Dad", 167));

        employeeList.add(new GasStation("Joe Smith", 10));
        employeeList.add(new GasStation("Tony Baloney", 100));
        employeeList.add(new GasStation("Benjamin Franklin", 100));
        employeeList.add(new GasStation("Mary Fairy", 101));
        employeeList.add(new GasStation("Bee See", 1));
    }

    /**
     * Display the list of employee
     */
    public void displayEmployees()
    {
        Iterator <Employee> it = employeeList.iterator();
        while(it.hasNext()) {
            Employee e = it.next();
            System.out.println(e);

        }
    }
    /**
     * Display the list of employee sorted
     */
    public void displaySortedEmployees()
    {
        **Collections.sort(employeeList);**
        Iterator <Employee> it = employeeList.iterator();
        while(it.hasNext()) {
            Employee e = it.next();
            System.out.println(e);

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我添加:implements类似于Employee类并且它现在编译,但我需要比较不同的子类:HockeyPlayer,Parent和on ....当调用方法时这是新的错误消息:java.lang.ClassCastException,教授不能被投射到HockeyPlayer

这是一个子类:

/**
 * Class HockeyPlayer.
 */
public class HockeyPlayer extends Employee implements Employable, Comparable<Employee>
{
    private       int     numberOfGoals;
    private       double  overTimePayRate ;

    /**
     * Constructor for objects of class Hockeyplayer
     */
    public HockeyPlayer(String name, int numberOfGoals)
    {
        super(name);
        overTimePayRate = 0.0;
        this.numberOfGoals = numberOfGoals;
    }

    /**
     * @return     overTimePayRate 
     */
    @Override
    public double getOverTimePayRate()
    {
        return overTimePayRate;
    }
    @Override
    public String   getDressCode()
    {
        return "jersey";
    }
    @Override
    public boolean  isPaidSalary()
    {
        return true;
    }
    @Override
    public boolean  postSecondaryEducationRequired()
    {
        return false;
    }
    @Override
    public String   getWorkVerb()
    {
        return "play";
    }
    @Override
    public boolean equals(Object that)
    {
        if(this == that){
            return true;
        }
        if(!(this instanceof HockeyPlayer)) {
            return false;
        }
        HockeyPlayer h = (HockeyPlayer) that;
        if(this.numberOfGoals == h.numberOfGoals) {
            return true;
        }
        return false;
    }
    @Override
    public int compareTo(Employee that)
    {
        if(this == that) {
            return 0;
        }

        HockeyPlayer h = (HockeyPlayer) that;

        if(this.numberOfGoals > h.numberOfGoals) {
            return +1;
        }
        else {
            return -1;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

我的猜测是你没有宣布这种Employee工具Comparable<Employee>,因此public static <T extends Comparable<? super T>> void sort(List<T> list)不适用......但很难说因为你没有提出你的Employee课程.

当我尝试使用以下代码时,这肯定是我收到的错误消息:

class Employee {}
Run Code Online (Sandbox Code Playgroud)

但它在我使用时编译:

class Employee implements Comparable<Employee> {

    // Obviously incorrect implementation, only used for demonstrating
    // that the code will now compile.
    public int compareTo(Employee other) {
        return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

假设各种其他类都是子类Employee,你需要弄清楚如何比较(比如说)a HockeyPlayer和a Parent.不要忘记,任何员工都需要与任何其他员工相媲美.根据我的经验,继承和比较(无论是为了平等还是排序)很少干净地工作......

如果您可以发布一个简短但完整的程序来证明问题,那将非常有帮助.