3

カスタムオブジェクトのifステートメントの比較に使用される値を定義することは可能ですか?

私は持っています:

パブリッククラス要素はComparable{を実装します

public int value;
public int[] sequence;
public int length;

public element(){}   

public element(int val){
    this.value = val;
}

@Override
public int compareTo(Object o) {
    return
}

}

次のようにandifステートメントを使用したいと思います。

if(element1> element2)。。

従来の代わりに:

if(element1.value> element2.value)。。

コンパレータ、toString()などでこれを達成することができませんでした

4

4 に答える 4

6

JLS 15.20.1に従い>、演算子でオブジェクト参照を使用することはできません。Javaは演算子のオーバーロードをサポートしていません。しかし、あなたは。を使用することで正しい方向に進んでいます。Comparator

if (comparator.compare(element1, element2) > 0)  // if (element1 > element2)

クラスがComparable<Element>、つまり他の要素に匹敵する場合も可能です。

if (element1.compareTo(element2) > 0)  // if (element1 > element2)
于 2013-03-18T21:18:48.337 に答える
2

いいえ、これはJavaでは不可能です。JLS§15.20.1から:

数値比較演算子の各オペランドの型は、プリミティブ数値型に変換可能な型(§5.1.8)である必要があります。そうでない場合、コンパイル時エラーが発生します。

これはPythonのような言語で可能であり、ほとんどすべての演算子をオーバーロードして非標準クラスで動作させることができます。

于 2013-03-18T21:19:17.367 に答える
1

Javaは演算子のオーバーロードをサポートしていないため、必要な比較を実行するメソッドを使用して2つのオブジェクトを比較することが、利用可能な最良のオプションです。

WrapperClass.compare(object1, object2) > 0 for object1.value > object2.value
WrapperClass.compare(object1, object2) < 0 for object1.value < object2.value
WrapperClass.compare(object1, object2) = 0 for object1.value == object2.value

文字列は、連結演算子のように演算子のオーバーロードを提供するクラスの1つです。

String str1 = "This ";
String str2 = "is a string";
str1 + str2 equals "This is a string"
于 2013-03-18T21:29:13.677 に答える
1

Javaはこれをサポートしていません。代わりに次のようなものを使用できます。

if (element1.compareTo(element2) > 0) {

}

そして、compareToメソッドで、次のようにします。

public int compareTo(YourClassObject o) {
    return (this.value - YourClassObject.value);
}
于 2013-03-18T21:24:16.773 に答える