我的问题接近这个问题(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;
}
}
任何欢迎和赞赏的建议!
答案 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
是一个类而不是参数化类型。