小さいときに童謡のレコードを聴いたことがあったような。なかったような。
なんかミニコンポについてたよーな気がしないでもないw
レコードクラスを使うサンプル
レコードクラスを作成。リストに追加します。
追加したリストから、レコード内のデータを出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import java.util.ArrayList; import java.util.List; public class RecordTest { public static void main(String[] args) { //レコードのリストを作成 List<KeyValueRecourd> list = new ArrayList<KeyValueRecourd>(); list.add(new KeyValueRecourd("01",100)); list.add(new KeyValueRecourd("02",200)); list.add(new KeyValueRecourd("03",300)); //全レコードを標準出力 System.out.println("--全レコードを標準出力--"); list.forEach(System.out::println); //全レコードの値を合計 System.out.println("--全レコードを合計--"); System.out.println(list.stream().mapToInt(t -> t.value()).sum()); //レコードの値をすべて2乗 System.out.println("--全レコードを2乗--"); list.stream().mapToInt(t -> t.pow()).forEach(System.out::println); } } record KeyValueRecourd(String key,int value) { private static final int SQUARE = 2; public int pow() { //valueの2乗値を返す return (int)Math.pow(value, SQUARE); } } |
実行結果
1 2 3 4 5 6 7 8 9 10 | --全レコードを標準出力-- KeyValueRecourd[key=01, value=100] KeyValueRecourd[key=02, value=200] KeyValueRecourd[key=03, value=300] --全レコードを合計-- 600 --全レコードを2乗-- 10000 40000 90000 |
サンプルの解説
classの代わりにrecordを指定すると、レコードクラスが作成できます。
レコードクラスの引数に、フィールド変数を指定します。この例ではkey,valueの2つです。
これがフィールド変数になるので、同じ変数名は指定できません。
また、ふつうのクラスと同じようにメソッド、staticのフィールド変数を追加で書くことができます。
レコードクラスの特徴は、こんな感じ。
- レコードクラスは、final扱い。abstractは不可。
- 格納するフィールド変数に応じた、equals,hashcode,toStringメソッドが自動的に作成される。
- 作成するレコードクラスは、java.lang.Recordが継承される。
- イミュータブルが強制される。つまり、後から値の変更は不可。
なお、レコードクラスは、Java16より使えますが、LTSを考えると実質Java17以降で使えるって感じですかねー。