9

Personを実装するクラスがある場合(たとえば、Comparableと比較personA.heightして)、使用することは可能ですか?personB.height

    personA < personB

代わりに

    personA.compareTo(personB) == -1? 

これを行う際に問題はありますか、それとも演算子をオーバーロードする必要がありますか?

4

6 に答える 6

15

personA < personBいいえ、代用はできません。また、Java では演算子をオーバーロードできません。

また、変更をお勧めします

personA.compareTo(personB) == -1

personA.compareTo(personB) < 0

あなたが今持っているものは、おそらくあなたのクラスでうまくいくでしょう。ただし、が 未満の場合は負の値compareTo()を返すという契約があります。その負の値は -1 である必要はなく、別のクラスで使用するとコードが壊れる可能性があります。また、誰かがクラスのメソッドを別の (しかし準拠している) 実装に変更した場合にも、壊れる可能性があります。personApersonBcompareTo()

于 2012-01-20T18:26:59.867 に答える
6

Java には演算子のオーバーロードはありません。あなたはおそらく C++ のバックグラウンドを持っています。

compareToメソッドを使用する必要があります。

于 2012-01-20T18:27:07.593 に答える
5

それは不可能です。Java は、(組み込みのオーバーロードを除いて) 演算子のオーバーロードをサポートしていません。

ちなみに、 と書くのではなく、 と書く== -1べき< 0です。compareTo特に-1/0/1ではなく、負/ゼロ/正の値を返す必要があるだけです。

于 2012-01-20T18:28:16.233 に答える
1

Java には1をオーバーロードする演算子がないため、はい、問題があります。これは不可能です。


1もちろん、組み込みのオーバーロードがいくつかあります。+演算子は、整数型、浮動小数点型、およびStrings で機能します。しかし、自分で定義することはできません。

于 2012-01-20T18:27:21.767 に答える