4

初心者、これについて頭を包むことができないようです。

アイテム クラス

public class Item implements Comparable {

private int number;
private String description;

public Item(int num, String descript){
    this.number = num;
    this.description = descript;
}

public int getNumber(){
    return number;
}

public String getDescription(){
    return description;
}

@Override public int compareTo(Object o){
    Item i = (Item) o;
    if(this.getNumber() < i.getNumber())
        return -1;

    if(this.getNumber() > i.getNumber())
        return 1;

    return 0;
}

}

主な方法

Item[] items = new Item[3];
    items[0] = new Item(102, "Duct Tape");
    items[1] = new Item(103, "Bailing wire");
    items[2] = new Item(101, "Chewing Gum");

    Arrays.sort(items);

    for (Item i : items){
        System.out.println(i.getNumber() + ": " + i.getDescription());
    }

items[0] = new Item(102, "Duct Tape");現在の変数番号、説明を設定するために Item コンストラクターを通過するメイン メソッドがインスタンス化するとき。

私の問題は、compareTo引数で何が渡されているのか理解できないようです。したがって、何をしているのか理解できないようですthis.getNumber() < i.getNumber()...

現在のオブジェクトが渡されたオブジェクトより小さい場合、負の数を返しますか?

どんな助けでも大歓迎です。

4

4 に答える 4

2

使用している未加工のインターフェイスComparableにより、このオブジェクトを別の と比較することができますObject。次に、が別の とのみ比較さItemれるように にキャストされます。this ItemItem

ComparableJavadocsによると、

このオブジェクトと指定されたオブジェクトを比較して順序付けます。このオブジェクトが指定されたオブジェクトより小さいか、等しいか、または大きいので、負の整数、ゼロ、または正の整数を返します。

さらに、が ではない場合、実行時compareToに がスローされます。ClassCastExceptionObjectItem

インターフェースの一般的な形式を使用することをお勧めします。

public class Item implements Comparable<Item> {

次に、比較するItem代わりに指定できます。Object

@Override public int compareTo(Item i){

Objectを にキャストする必要はありませんItem。を呼び出すときcompareTo、コンパイラは、比較対象のオブジェクトが である必要があることを強制しますItem

于 2013-07-16T23:47:26.483 に答える
0

compareTo メソッドに渡される Object は Item オブジェクトです。Arrays.sort() は、オーバーライドされたメソッド メソッドを実装するとそれを呼び出します。最適な実装は、プリミティブ Java 型の compareTo メソッドを返すことです。

 @Override 
 public int compareTo(Object o){
      return (this.getNumber().compareTo((Item)o.getNumber());
 }

(ただし、これには数値を整数型にする必要があります)

于 2013-07-16T23:56:55.893 に答える