データ クラスは、Java の旧式の POJO に代わるものであるようです。これらのクラスが継承を可能にすることは十分に期待できますが、データ クラスを拡張する便利な方法は見つかりません。必要なのは次のようなものです。
open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
上記のコードはcomponent1()
メソッドの衝突のため失敗します。data
クラスの 1 つだけにアノテーションを残してもうまくいきません。
データ クラスを拡張するための別の慣用句があるのでしょうか?
UPD: 子クラスのみに注釈を付けたとしても、data
注釈はコンストラクタで宣言されたプロパティのみを処理します。つまり、親のすべてのプロパティを宣言しopen
てオーバーライドする必要があり、これは見苦しいです。
open class Resource (open var id: Long = 0, open var location: String = "")
data class Book (
override var id: Long = 0,
override var location: String = "",
var isbn: String
) : Resource()
ベストアンサー1
実のところ、データ クラスは継承とあまり相性がよくありません。データ クラスの継承を禁止するか、厳しく制限することを検討しています。たとえば、equals()
非抽象クラスの階層で正しく実装する方法がないことはわかっています。
したがって、私が提案できるのは、データ クラスで継承を使用しないことだけです。