68

データクラスを作成しました

data class Something (
    val a : String,
    val b : Object,
    val c : String
)

toStringプログラムの後半では、メソッドを拡張しようとしたこのデータ クラスの文字列表現が必要です。

override fun Something.toString() : String = a + b.result() + c

ここでの問題は、toStringトップレベルの関数には適用できないため、関数を拡張 (オーバーライド) できないことです。

カスタムデータクラスの toString メソッドを適切にオーバーライド/拡張​​する方法は?

4

1 に答える 1

122

Kotlin では、拡張関数はメンバー関数をオーバーライドできません。さらに、それらは静的に解決されます。これは、拡張関数を記述した場合fun Something.toString() = ...メンバーが常に勝つs.toString()ため、それに解決されないことを意味します。

しかし、あなたの場合、クラスは通常のクラスと同じようにボディを持つことができるため、クラスボディtoString内でオーバーライドすることを妨げるものは何もありません:Somethingdata

data class Something(
    val a: String,
    val b: Any,
    val c: String
) {
    override fun toString(): String = a + b + c
}
于 2016-03-13T13:47:21.057 に答える