[解決済み】Kotlinでデータクラスを拡張する
2022-04-02 10:59:38
質問
データクラスは、Javaの昔ながらのPOJOに代わるもののようです。これらのクラスが継承を可能にすることは非常に予想されますが、私はデータクラスを拡張する便利な方法を見いだすことができません。私が必要としているのは、このようなものです。
open data class Resource (var id: Long = 0, var location: String = "")
data class Book (var isbn: String) : Resource()
上記のコードは
component1()
メソッドを使用します。離脱
data
のアノテーションを片方のクラスだけに記述しても、うまくいきません。
データクラスを拡張する別のイディオムがあるのでは?
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()
解決方法は?
実は、データクラスは継承とあまり相性がよくありません。データクラスの継承を禁止するか、厳しく制限することを検討しています。例えば、データクラスで実装できないことが知られている
equals()
非抽象クラスで階層化した場合、正しく表示されます。
つまり、データクラスで継承を使わないでくださいということです。
関連
-
[解決済み] Swiftでストアドプロパティをオーバーライドする
-
[解決済み] ベースクラスのコンストラクタを呼び出す際のルールは?
-
[解決済み] 派生クラス関数から親クラス関数を呼び出すには?
-
[解決済み] Kotlin 三項条件演算子
-
[解決済み] 抽象的なクラスをインスタンス化することはできますか?
-
[解決済み] オブジェクトのクラスはどのように決定するのですか?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】Kotlin Androidでデータクラスに空のコンストラクタを作成する方法
-
[解決済み] Swift言語における抽象クラス
-
[解決済み] GSONを使ったJsonからのKotlinデータクラス
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン