私はクラスのためにcompareTo
と演算子をオーバーロードしようとしていました。Kotlinで過負荷になる
比較演算子に問題はありません。これはメンバとしても拡張機能としてもうまく機能します。
equals演算子はメンバで、equals funをオーバーライドする必要があります。
class MyClass {
companion object {
private val NUMBER: Int = 5
operator fun compareTo(value: Int) = NUMBER - value
override operator fun equals(other: Any?) =
when (other) {
is Int -> NUMBER == other
else -> throw Exception("")
}
}
}
fun test() {
if (MyClass < 10) {
//ok
}
//Operator '==' cannot be applied to 'MyClass.companion' and kotlin.Int
if (MyClass == 5) {
}
}
編集:適切に '==' オーバーロードする方法は?
なぜこれが欲しいのか混乱しています。正しく実装された 'equals'メソッドは、それ自身と比較されたとき以外は常にコンパニオンオブジェクトに対して' false'を返します(これはデフォルト/継承された動作です)。 – mfulton26