簡體   English   中英

使您自己的課程“具有可比性”

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

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