[英]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.