Comparable
インターフェイスを実装するときは、compareTo()
というメソッドを定義することになっているので、次のようなことがドキュメントに記載されています:Java同等の戻り値。正確に1、-1または0でなくてはなりませんか?
全てのxとyのSGN(x.compareTo(Y))== -sgn(y.compareTo(X))。
関係は推移的である。つまり、(x.compareTo(y)> 0 & & y.compareTo(z)が> 0)x.compareTo(Z)> 0を意味しています。
x.compareTo(y)== 0は、すべてのzについてsgn(x.compareTo(z))== sgn(y.compareTo(z))を意味します。今
、混乱取得部は、次のようにそれが指定され、戻り値である:
は負の整数、ゼロを返し、このオブジェクト として正の整数が少なく指定されたオブジェクトより大きい、等しい、または大きい
それは、戻り値がこのように限定されている要件として言及されていなくても、ほとんどの実装は1
、-1
または0
を返すようです。
次のコードは、このように、クラスのインスタンスを含む(Collections.sort()
を使用して)リストの並べ替えのために働くFoo
:
public int compareTo(Foo other){
return this.value > other.value? 1 : this.value < other.value ? -1 : 0;
}
しかしこれはない:
value
が
long
ある
public int compareTo(Foo other){
return (int)(this.value - other.value);
}
、および値の差はInteger.MAX_VALUE
を超えません。
は、私がここで何かをしないのですか、正確に1
、-1
または0
、ドキュメントに矛盾するために必要な戻り値はありますか?
更新:すべてのお返事ありがとうございますが、人間の要因はここに責任があるようです。私は計算された差がInteger.MAX_VALUE
より小さいと言いました。これはオーバーフローがないことを意味するはずですが、計算が間違っていたので、私は実際に奇妙な結果を引き起こしたを取得しました。
このような制限はありません。必要な負または正の整数を返すことができます。有効なJavaを参照してください。 –
解決策としてこれをマークして、私は実際の問題を見つけることができました。 – Jave