LoginSignup
2
0

More than 3 years have passed since last update.

Java JDK14でプレビュー追加されたRecordsについて

Posted at

はじめに

Javaも早いもので、もうすぐJDK15がリリースされます!(2020年9月予定)
ただ、その一つ前のJDK14も、あまりキャッチアップできていないのが正直なところでした・・・。
色々と調べていて、 Records という概念がJDK14でPreview版リリースされたことを知ったので、ちょっと記事を書いてみました。

※ Preview版ということで、JDK15以降ではまた形が変わるかもしれません。予めご了承ください。

Recordsとは

下記です。
https://openjdk.java.net/jeps/359
データ保存用としてrecordが提供されるようになり、
これを付与したクラスは結果として変更不可能(immutable)なオブジェクトとなります。
具体的には下記のような形になります。

record Point(int x, int y) { }

上記は結果として以下のクラスとなります。

class Point extends Record {
  private final int x;
  private final int y;

  public Point(int x, int y) {
    this.x = x;
    this.y = y;
  }

  public int x() {
    return x;
  }
  public int y() {
    return y;
  }

  public int hashCode() { ... }
  public boolean equals() { ... }
  public String toString() { ... }
}

上記のように、コンストラクタ以外からフィールド変数にアクセスできず(immutable)、
equals hashCode toString のメソッドを実装したクラスが生成されます。

引数の値は、下記のようにチェック可能なようです。

record Point(int x, int y) {
  public Range {
    // yにx未満の値のみ設定可能とする場合
    if (x > y) throw IllegalArgumentException();
    // 下記のように明示的に設定しなくても、値の設定をしてくれる。
    // this.x = x;
    // this.y = y;
  }
}

所感

まだPreview版なので今後どのようになるのかは不明ではありますが、
DTOで用いたり、 Record を用いることで直感的に理解可能になったりするのではと思いました。
名前付きtupleである、という表現が個人的に一番しっくりきました。
より深く知りたい方は、下記の記事が非常によくわかりやすかったです。
https://www.infoq.com/jp/articles/java-14-feature-spotlight/

Javaもどんどん進化していきますね・・・。ちゃんとキャッチアップしていきます。
読んでいただきありがとうございました!

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0