https://blogs.oracle.com/otnjp/post/records-come-to-java-ja
Java14 で導入された「レコード」の性質が名前付きタプルの側面を持っていることを考えると
せめて Java11 にTuple が作れるようになっていて欲しかった。
Lombok で、システム内で作るしかないのか。。。
Lombokアノテーション @Value が以下 Lombokアノテーションを効果があることを利用して
@Getter
@ToString
@EqualsAndHashCode
@AllArgsConstructor
総称型 A, B のタプルに相当するクラスを宣言
import lombok.Data; import lombok.Value; @Data(staticConstructor="of") @Value public class Pair<A, B>{ private A left; private B right; }
staticConstructor を @Data で指定して of メソッドでインスタンスを生成します。
Pair<String, Integer> p = Pair.of("ABC", 24); System.out.println("left = " + p.getLeft() + " right = " + p.getRight() + " " + p.toString());
left = ABC right = 24 Pair(left=ABC, right=24)
@Builder を使えば、型またはフィールド変数が多い時
ofメソッドで値を並べるのも誤ったコードを書くことを回避できる。
import lombok.Builder; import lombok.Value; import lombok.experimental.Accessors; @Value @Accessors(fluent=true) @Builder public final class Pair<A, B>{ private A left; private B right; }
Pair<String, Integer> p = Pair.<String, Integer>builder() .left("ABC") .right(24) .build(); System.out.println("left = " + p.left() + " right = " + p.right() + " " + p.toString());
フィールド名そのものをgetterメソッドが厭であるなら、
@Accessors(fluent=false) にすれば、
getterメソッド、"get" + フィールド名(先頭大文字)でなくてはならなくなる
System.out.println("left = " + p.getLeft() + " right = " + p.getRight() + " " + p.toString());