web-dev-qa-db-ja.com

toStringでデータクラスを拡張する方法

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

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

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

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

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

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

29
Aleksandar

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

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

data class Something(
    val a: String,
    val b: Any,
    val c: String
) {
    override fun toString(): String = a + b + c
}
53
hotkey