簡體   English   中英

Java:靜態方法無法識別重寫的compareTo()

[英]java: overridden compareTo() not recognized in static method

我編寫了一個稱為Member的類,該類實現Comparable。 我重寫了compareTo方法,我編寫了另一個名為BinarySearch的類,該類包含一個靜態方法,該靜態方法稱為binarySearch,該方法具有:

    public class BinarySearch {


    private BinarySearch(){
    }

    public static int binarySearch(List<Member> list, Member member){
       int low = 0;                  
       int high = list.size();     
       int middle;                  

    while ( low <= high ) 
    {
      middle = ( low + high ) / 2;
      if ( member.equals(list.get(middle)))  
         return middle;
      else if ( member.compareTo(list.get(middle)) < 0)
         high = middle - 1;  
      else
         low = middle + 1;   
   }

   return -1; 
}

}

該行:

    member.compareTo(list.get(middle))

給出一個錯誤說:找不到方法compareTo(object)。 但是編譯器可以在其他類中找到該方法。 我的Member類的所有其他方法也可以在binarySearch方法中看到。

會員類別:

    public class Member implements Comparable<Member>{
        private String firstName;
        private String lastName;
        private String email;
        private String phoneNumber;
        private int level;

    public Member(){
        this("","","","",-1);
    }

    public Member(String firstName, String lastName, String email, String phoneNumber,      int level){
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
        this.phoneNumber = phoneNumber;
        this.level = level;
}

public String getFirstName() {
    return firstName;
}

public String getLastName() {
    return lastName;
}

public String getEmail() {
    return email;
}

public String getPhoneNumber() {
    return phoneNumber;
}

public int getLevel() {
    return level;
}

public Member setFirstName(String firstName) {
    return new Member(firstName, this.lastName, this.email, this.phoneNumber, this.level);
}

public Member setLastName(String lastName) {
    return new Member(this.firstName, lastName, this.email, this.phoneNumber, this.level);
}

public Member setEmail(String email) {
    return new Member(this.firstName, this.lastName, email, this.phoneNumber, this.level);
}

public Member setPhoneNumber(String phoneNumber) {
    return new Member(this.firstName, this.lastName, this.email, phoneNumber, this.level);
}

public Member setLevel(int level) {
    return new Member(this.firstName, this.lastName, this.email, this.phoneNumber, level);
}

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Member other = (Member) obj;
    if (!Objects.equals(this.lastName, other.lastName)) {
        return false;
    }
    if (!Objects.equals(this.phoneNumber, other.phoneNumber)) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return "Member{" + "firstName=" + firstName + ", lastName=" + lastName + 
            ", email=" + email + ", phoneNumber=" + phoneNumber + ", level=" + 
            level + '}';
}

@Override
public int compareTo(Member t) {
    if (equals(t)){
        return 0;
    }
    if (lastName.compareToIgnoreCase(t.lastName) == -1){
        return -1;
    }else{
        return 1;
    }

}

}

您的列表沒有類型參數,因此從列表中get所有內容默認都被視為Object ,同時根據錯誤消息判斷, compareTo只接受與其他Member對象的比較。 您可以通過將列表的類型從List更改為List<Member>來解決此問題-或者(但可以選擇kludgier)重新制作您的compareTo以使用Object或使用類型轉換。

暫無
暫無

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

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