簡體   English   中英

無法在Comparator通用類中調用實例方法

[英]Cannot call instance method in a Comparator generic class

我的問題接近於這個問題( 泛型類中的靜態方法? ),但我認為有些不同嗎?

說我有一個帶有實例方法getSalary()Employee

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

    public int getSalary() {
        return salary;
    }
}

還有一個Comparator通用類MyComparator

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

現在,我有一個MyComparator<Employee>的警告和調用getSalary()實例方法的錯誤。

我想我在這里遺漏了一些東西,但無法確切了解發生了什么? Employee類上聲明通用比較器的最佳方法是什么? 最佳做法? 還是建議在下面的代碼中實現Employee Comparable

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;
    }
}

任何建議歡迎和贊賞!

您正在Comparator類中聲明類型參數Employee 該類聲明與:

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();
    }
}

您的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是一個類,而不是參數化類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM