注目記事

【Javaコード入門】オブジェクト指向構文_⑦レコード

レコード - record命令

[modifier] record name(type field, ...) {
  definition
}
    modifier:修飾子
    name:レコード名
    type:フィールドの型
    field:フィールドの名前
    definition:メンバーの定義

もともと、クラスとはデータ(フィールド)と手続き(メソッド)の集合から構成されるしくみです。しかし、実際のアプリではデータだけを扱うことを目的としたクラスが一定数存在します。Java 16以降では、このようなクラスをより簡単に扱うためのしくみ――#レコード#を提供しています。
  レコードは、record命令を使って定義できます。たとえば以下は、name、ageフィールドを持ったAnimalレコードの例です。

Animal.java

  1. public record Animal(String name, int age) {}

record命令では、以下のようなメンバーを自動生成してくれます(*)。

  • コンストラクター
  • フィールドにアクセスするためのゲッター
  • equals/hashCodeメソッド
  • toStringメソッド

*)もちろん、recordブロック配下に任意のメンバーを追加することも可能です。

よって、上のAnimalクラスは、以下のような呼び出しが可能です。

RecordClient.java

  1. package com.example.mynavi.record;
  2.  
  3. public class RecordClient {
  4.   public static void main(String[] args) {
  5.     var a1 = new Animal("しずく", 8);
  6.     var a2 = new Animal("しずく", 8);
  7.     System.out.println(a1); // 結果:Animal[name=しずく, age=8]
  8.     System.out.println(a2.name()); // 結果:しずく
  9.     System.out.println(a1.equals(a2)); // 結果:true
  10.     System.out.println(a1 == a2); // 結果:false
  11.   }
  12. }

ちなみに、レコードはイミュータブルなクラスを生成します。よって、フィールドを設定するためのセッターはありません。

オブジェクト指向構文_目次
class命令
new演算子
フィールドを定義する
static final修飾子
メソッドを定義する
コンストラクターを定義する
レコード
package宣言
import命令
import static命令
ネストしたクラスを定義する
モジュール

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。