大変お世話になっております。
反逆する武士
uematu tubasaです。
初回投稿日時:2024年8月5日(令和6年8月5日)
本日はITエンジニアとして、勉強した内容を備忘録的に記載する記事です。
したがって、いつもの政治経済系の記事ではありません。
recordについて
まず、Java17で説明するべきは、recordです。
recordとは複数のデータを持ち運びするようなコンテナのようなクラスのことです。
不変のデータを保持して、簡単に利用できるように用意された新機能と言えます。
いわゆるSetterがデフォルトで実装されていないため、インスタンス化した際にデータをセットした後は変更できません。
なぜならば、recordクラスでSetter機能を実装したところ、フィールドが定数として自動定義され、コンパイルエラーになるからです。
データを最初に設定してしまえば、その後利用することはあっても、変更することは無い場合は重宝しそうですね。
デフォルトでrecordが保持している機能は以下3つになります。
1、equals
いわゆる同値の比較メソッドです。
同値であれば、trueをリターンして、同値では無い場合はfalseをリターンします。
2、toString
設定された中身をすべてStringでリターンします。
3、hashCode
呼び出し元のオブジェクトをハッシュコードと呼ばれるint型の値に変換し、戻り値として返すメソッドが実装されています。
したがって、中身が全く同じ場合は、全く同じハッシュコードがリターンされます。
あとは、特殊なコンストラクタを実装することができます。
設定された値をチャックして、不適切だった場合は例外発生させるようなことが可能です。
注意事項としては、通常のコンストラクタのように引数を設定しないことです。
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は暗号化したり、データベースへの格納に利点がありまそうです。
データベースに、ユーザー情報を格納したい場合、個人情報が含まれます。
したがって、hashCodeで管理したいというニーズがありそうですね。
※一見すると名前や住所などが数字のみで管理されているので、安全性が高まる。
最後になりますが、やはりITエンジニアとしては実装する量を減らしたいという要望があります。
見事にその要望に応えてくれたという印象です。
以上です。