无法在Comparator泛型类中调用实例方法

时间:2014-02-25 20:52:24

标签: java generics comparator comparable

我的问题接近这个问题(Static method in a generic class?),但我认为有点不同?

假设我有一个Employee类,其实例方法为getSalary()

public class Employee {
    protected long employeeId;
    protected int salary;

    public int getSalary() {
        return salary;
    }
}

还有比较器通用类MyComparator

public class MyComparator<Employee> implements Comparator<Employee> {
    public int compare(Employee emp1, Employee emp2) {
        return emp1.getSalary() - emp2.getSalary();
    }
}

现在我发出了MyComparator<Employee>的警告以及调用getSalary()实例方法的错误。

我想我在这里遗漏了一些东西,但不确切地知道发生了什么?在Employee类上声明通用比较器的最佳方法是什么?最佳做法?或者建议在下面的代码中实现Comparable Employee

public class Employee implements Comparable<Employee> {
    protected long employeeId;
    protected int salary;

    public int getSalary() {
        return salary;
    }

    @Override
    public int compareTo(Employee e) {
        return this.salary - e.salary;
    }
}

任何欢迎和赞赏的建议!

2 个答案:

答案 0 :(得分:4)

您在Employee课程中声明了类型参数Comparator。该类声明与:

相同
public class MyComparator<T> implements Comparator<T>

得到问题?您应该将该类更改为:

public class MyComparator implements Comparator<Employee> {
    public int compare(Employee emp1, Employee emp2) {
        return emp1.getSalary() - emp2.getSalary();
    }
}

答案 1 :(得分:2)

您的MyComparator<Employee>与撰写MyComparator<E extends Object>

相同

我希望你写的是

public class MyComparator implements Comparator<Employee> {
    public int compare(Employee emp1, Employee emp2) {
        return emp1.getSalary() - emp2.getSalary();
    }
}

在这种情况下,Employee是一个类而不是参数化类型。