Kotlin dataクラスとは何か?と使い方 便利!

Kotlinの便利なところのメモ。

今回はdataクラス。

Kotlinのdataクラスとは

classを宣言する時にdataとつけるとよく使う便利メソッドを勝手に実装してくれる仕組み。

これだけでOK。簡単ですね。

ただし!

  • プライマリコンストラクタは、少なくとも1つのパラメータを持っている必要があります。
  • すべてのプライマリコンストラクタのパラメータは、 val または var としてマークする必要があります。
  • データクラスは、 abstract, open, sealed または inner にすることはできません。
  • データクラスは他のクラスを拡張しない場合があります(ただし、インターフェイスを実装することはできます)。

Kotlin公式リファレンスより)

だそうです。

最後の一文がどういう意味なのかちょっとわからないので要調査。

openにできないのでdataを利用したクラスを継承することはできないようです。

継承したくなること結構でてきそうですがその場合は自力で実装するんですかね。

何が起きるか

  • equals()が実装される
  • hashCode()が実装される
  • toString() で ”User(name=John, age=42)” に変換されるようになる
  • componentN()  が実装される
  • copy() が実装される

へ〜

equals()

equals()は文字通り二つのインスタンスのが同じかどうかをチェックする時に使います。

以下テストコード。

簡単ですね。

hashCode()

その名の通りハッシュコードを返します。

公式リファレンスをgoogle翻訳したら結構いい感じだったのでそのまま引用

同じオブジェクトに対して複数回呼び出されるたびに、オブジェクトの等価比較で使用される情報が変更されない限り、hashCodeメソッドは常に同じ整数を返す必要があります。
equals()メソッドで2つのオブジェクトが等しい場合、2つのオブジェクトのそれぞれでhashCodeメソッドを呼び出すと、同じ整数の結果が生成される必要があります。

これといって特殊なことはありませんね。

直接利用することはそうそうないと思います。が一応動作確認コード。

componentN()

これが本日の目玉です。

Nとなっているとこには数字が入り(component1())メンバ変数(kotlinの場合厳密にはプロパティですかね)の数だけ 生成されます。

で、これがあることで何がいいかと言いいます、以下のような感じのことができるようになります。

userAの値をそれぞれa,bに同時に代入しています。

componentN()メソッドが実装されることでこれが可能になります。

これは多分Kotlinの便利ポイントですね。

因みに独自クラスに自分で実装しても同じ機能が使えます。

copy(),toString()

特に特殊なことはないしめんどくさいので割愛。

ということでkotlinの便利なdataクラスでした。

よく考えたらequalsとかは何も特殊じゃないのでコードいらなかった気がする。まあいいか。

ではまた。

にほんブログ村 IT技術ブログへ
おすすめ

Udemyのビデオ講座は本当に捗るので学習にとてもおすすめです。まじで。


スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です