日本憲政史上最強の政策ブログを目指す!

反逆する武士

情報技術(IT)

【備忘録】JavaSE17の特徴を理解する【record】

投稿日:

大変お世話になっております。
反逆する武士

uematu tubasaです。
初回投稿日時:2024年8月5日(令和6年8月5日)

本日はITエンジニアとして、勉強した内容を備忘録的に記載する記事です。

したがって、いつもの政治経済系の記事ではありません。

recordについて

まず、Java17で説明するべきは、recordです。

不変のデータを保持して、簡単に利用できるように用意された新機能と言えます。

いわゆるSetterがデフォルトで実装されていないため、インスタンス化した際にデータをセットした後は変更できません。

なぜならば、recordクラスでSetter機能を実装したところ、フィールドが定数として自動定義され、コンパイルエラーになるからです。

データを最初に設定してしまえば、その後利用することはあっても、変更することは無い場合は重宝しそうですね。

デフォルトでrecordが保持している機能は以下3つになります。

いわゆる同値の比較メソッドです。

同値であれば、trueをリターンして、同値では無い場合はfalseをリターンします。

設定された中身をすべてStringでリターンします。

呼び出し元のオブジェクトをハッシュコードと呼ばれるint型の値に変換し、戻り値として返すメソッドが実装されています。

したがって、中身が全く同じ場合は、全く同じハッシュコードがリターンされます。

あとは、特殊なコンストラクタを実装することができます。

設定された値をチャックして、不適切だった場合は例外発生させるようなことが可能です。

注意事項としては、通常のコンストラクタのように引数を設定しないことです。

Recordクラスその1
Recordクラスその2
Recordクラスその3

recordのサンプルコード

package Java17;

public class Main {

public static void main(String[] args) {

Population p = new Population("宮城県", 10000, 7.1);

Population p2 = new Population("岩手県", 10000, 7.1);

System.out.println(p.prefecture());

System.out.println(p.population());

System.out.println(p.rate());

System.out.println(p.equals(p2));

System.out.println(p.toString());

System.out.println(p2.toString());

System.out.println(p.hashCode());

System.out.println(p2.hashCode());

}

}

package Java17;

public record Population(String prefecture, int population, double rate) {

public Population{

if (prefecture == null) throw new IllegalArgumentException("prefecture is null");

if (population < 0) throw new IllegalArgumentException("population is under 0");

if(rate > 10000.0)throw new IllegalArgumentException("rate is very big");

}

}

実行結果は以下になります。

宮城県

10000

7.1

false

Population[prefecture=宮城県, population=10000, rate=7.1]

Population[prefecture=岩手県, population=10000, rate=7.1]

1544970524

1856763130

※もし、特殊なコンストラクタに記述した条件に合致する値が各項目に設定されていたら、例外が発生します。

この新機能を調べてみての所感

ITエンジニアとしては、不変なデータを保持してそれを利用するということは頻繁にあります。

例えば、とあるシステムにおけるユーザー新規登録後の操作などです。

※ユーザ情報の更新フェーズには行かないから、不変と想定される。

便利な機能が追加されたなという印象ですね。

データベースに、ユーザー情報を格納したい場合、個人情報が含まれます。

したがって、hashCodeで管理したいというニーズがありそうですね。

※一見すると名前や住所などが数字のみで管理されているので、安全性が高まる。

最後になりますが、やはりITエンジニアとしては実装する量を減らしたいという要望があります。

見事にその要望に応えてくれたという印象です。

以上です。

――――――――――――――――――――――――――――――――――――――――
最後までお読みいただき、ありがとうございます。
★★★ブログTOP★★★
記事が参考になりましたら、ブログランキングで応援お願いします。

――――――――――――――――――――――――――――――――――――――――

-情報技術(IT)
-,

Copyright© 反逆する武士 , 2024 All Rights Reserved Powered by AFFINGER5.