[英]Making your own class 'Comparable'
我遵循了教程,但未能使我的Country
課程Comparable
我的BST
Comparable
。
主要的:
BinarySearchTree A = new BinarySearchTree();
Country a = new Country("Romania", "Bucharest", 1112);
A.insert(a);
國家級:
public int compareTo(Object anotherCountry) throws ClassCastException {
if (!(anotherCountry instanceof Country))
throw new ClassCastException("A Country object expected.");
String anotherCountryName = ((Country) anotherCountry).getName();
int i = this.name.compareTo(anotherCountryName);
if(i < 0){
return -1;
} else {
return 0;
}
}
錯誤:
@Override
public int compareTo(Object anotherCountry) throws ClassCastException {
if (!(anotherCountry instanceof Country))
throw new ClassCastException("A Country object expected.");
String anotherCountryName = ((Country) anotherCountry).getName();
return this.name.compareTo(anotherCountryName);
Description Resource Path Location Type
名稱沖突:Country 類型的方法 compareTo(Object) 與 Comparable 類型的 compareTo(T) 具有相同的擦除,但不會覆蓋它 Country.java /Lab2_prob 4/src line 17 Java Problem
Description Resource Path Location Type
The method compareTo(Object) of type Country must override or implement a supertype method Country.java /Lab2_prob 4/src line 17 Java Problem
和班級:
public class Country implements Comparable<Country>{
private String name;
private String capital;
private int area;
Description Resource Path Location Type
類型 Country 必須實現繼承的抽象方法 Comparable.compareTo(Country) Country.java /Lab2_prob 4/src line 2 Java Problem
您的Country
類應該實現Comparable
:
public class Country implements Comparable<Country>
那么你的compareTo
方法應該是這樣的:
@Override
public int compareTo(Country anotherCountry) {
return this.name.compareTo(anotherCountry.getName());
}
注意compareTo
的簽名。 參數可以(並且必須)是Country
類型,而不是Object
類型。 這是必需的,因為Comparable
上的泛型類型參數。 好處是您不必再檢查類型。 缺點是您只能將Country
與其他Country
對象(或其子類型)進行比較,但在大多數情況下,這無論如何都是您想要的。 如果不是,您必須更改類型參數,例如,如果您使用Comparable<Object>
, compareTo
的簽名可以再次為Object
。 您可以在此處閱讀有關泛型的更多信息。
一個Comparable應該返回:
負整數、零或正整數,因為此對象小於、等於或大於指定的對象。
但是,您的代碼僅返回 -1 或 0,這是不正確的; 這意味着this
可以小於另一個對象,或者相等,但不能更大!
無需修改name.compareTo()
返回的值 - 您可以直接返回它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.