【Java】レコードクラスについて

【Java】レコードクラスについて

Javaのレコードクラスについて、特徴、使い方、メリット、制約、実例などを詳しく解説します。

以下の各見出しから、興味のある内容にジャンプできます。

レコードクラスとは

レコードクラスは、Java 14(プレビュー機能として導入)およびJava 16(正式機能として導入)で導入された、データを簡潔に表現するためのクラスです。主にイミュータブルなデータキャリアとして利用され、フィールド、コンストラクタ、アクセサーメソッド、toString()equals()hashCode()が自動生成されます。

レコードクラスの特徴

レコードクラスには以下のような特徴があります。

  • イミュータブルなデータ構造:レコードクラスのフィールドはデフォルトでfinalです。
  • 自動生成されるメソッド:toString()equals()hashCode()が自動的に生成されます。
  • 簡潔な構文:宣言が短く、読みやすいコードを実現します。
  • フィールドのリストが重要:コンストラクタやアクセサーメソッドもフィールドに基づいて生成されます。

レコードクラスのメリット

レコードクラスを使用することで、以下のようなメリットがあります。

  • ボイラープレートコードの削減:データ保持用クラスでの定型的なコードを記述する手間が省けます。
  • 可読性の向上:クラス宣言が簡潔で、意図が明確になります。
  • イミュータブルデータの安全性:変更不可なデータモデルを簡単に作成できます。

レコードクラスの例

以下に具体的な使用例を示します。

基本的なレコードクラスの定義

public record Point(int x, int y) {}

上記の定義では、以下のメソッドが自動生成されます:

  • int x()xフィールドの値を返す
  • int y()yフィールドの値を返す
  • String toString()"Point[x=値, y=値]"形式の文字列を返す
  • boolean equals(Object o)
  • int hashCode()

レコードクラスのインスタンス作成

Point point = new Point(3, 5);
System.out.println(point);  // 出力: Point[x=3, y=5]

カスタマイズしたメソッド

レコードクラスに独自のメソッドを追加することも可能です。

public record Circle(Point center, double radius) {
    public double area() {
        return Math.PI * radius * radius;
    }
}

使用例:

Circle circle = new Circle(new Point(0, 0), 5);
System.out.println(circle.area());  // 出力: 78.53981633974483

カスタムコンストラクタの利用

コンストラクタをカスタマイズすることも可能です。

public record Rectangle(int width, int height) {
    public Rectangle {
        if (width <= 0 || height <= 0) {
            throw new IllegalArgumentException("幅と高さは正の数である必要があります。");
        }
    }
}

レコードクラスの制約

レコードクラスには以下のような制約があります。

  • イミュータブルである必要がある:フィールドはfinalで、再代入できません。
  • 継承不可:レコードクラスは他のクラスを継承できず、また継承されることもありません。
  • 状態の管理が制限される:複雑なロジックや可変状態を持つオブジェクトには適しません。

まとめ

レコードクラスは、データキャリアとしての用途に非常に適しており、シンプルで可読性の高いコードを実現します。ただし、イミュータブル性や継承の制約があるため、用途に応じた使い分けが必要です。

コメントを残す

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