Lombok でできること確認します。( @AllArgsConstructor )と 定数

2021年5月6日

先日の投稿に引き続き、 Lombok の機能についてみていこうと思います。
またまたコンストラクタ関連のアノテーションで @AllArgsConstructor になります。

すべてが必要なの!

前回、前々回と Lombok の機能であるコンストラクタを自動生成するアノテーションの確認を行いました。
Lombok でできること確認します。( @NoArgsConstructor )
Lombok でできること確認します。( @RequiredArgsConstructor )と 定数

本日確認する機能は「すべてのフィールド」を引数にとるコンストラクタを自動生成する機能となります。

早速実装しましょう。

今回は以下の変数・定数を用意しました。

  • 静的定数
  • 定数
  • メンバ変数

それぞれに対してすべてのアクセス修飾子を確認します。

package com.example.demo;

import lombok.AllArgsConstructor;
import lombok.ToString;

@ToString
@AllArgsConstructor
public class HogeLombok {
	// 静的定数
	public static final int PUBLIC_STATIC_FINAL_TEST01;
	private static final int PRIVATE_STATIC_FINAL_TEST02;
	protected static final int PROTECTED_STATIC_FINAL_TEST03;
	static final int PACKAGE_STATIC_FINAL_TEST04;
	
	// 定数
	public final int PUBLIC_FINAL_TEST01;
	private final int PRIVATE_FINAL_TEST02;
	protected final int PROTECTED_FINAL_TEST03;
	final int PACKAGE_FINAL_TEST04;
	
	// メンバ変数
	public int public_test01;
	private int private_test02;
	protected int protected_test03;
	int package_test04;
}

こんな感じです。

すでに今回の機能である @AllArgsConstructor を使用しています。
@ToString 確認しやすくするのために使用しています。

すると実装時点で以下のようなコンパイルエラーが発生しました。

この結果から、 Lombok の @AllArgsConstructor は静的定数を対象としていないということがわかります。
ということで今回は静的定数を除外しておきます。

package com.example.demo;

import lombok.AllArgsConstructor;
import lombok.ToString;

@ToString
@AllArgsConstructor
public class HogeLombok {
//	// 静的定数
//	public static final int PUBLIC_STATIC_FINAL_TEST01;
//	private static final int PRIVATE_STATIC_FINAL_TEST02;
//	protected static final int PROTECTED_STATIC_FINAL_TEST03;
//	static final int PACKAGE_STATIC_FINAL_TEST04;
	
	// 定数
	public final int PUBLIC_FINAL_TEST01;
	private final int PRIVATE_FINAL_TEST02;
	protected final int PROTECTED_FINAL_TEST03;
	final int PACKAGE_FINAL_TEST04;
	
	// メンバ変数
	public int public_test01;
	private int private_test02;
	protected int protected_test03;
	int package_test04;
}

 

呼び出し元の実装です。

御覧の通り、全ての定数およびメンバ変数がコンストラクタの引数として定義されています。

続きを実装しておきます。

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		SpringApplication.run(DemoApplication.class, args);
		
		// インスタンス化!
		HogeLombok v01 = new HogeLombok(10, 11, 12, 13, 100, 101, 102, 103);
		
		System.out.println(v01);
	}
}

確認してみよう

実行してみます。

ちゃんと値が設定されましたね!

 

まとめ

Lombok の @AllArgsConstructor について確認を行いました。
Allとついているのでどんな変数・定数でもコンストラクタの引数となる・・・のではなく
静的定数は対象外であることが確認できました。

静的変数はシステム稼働中に絶対変更されたくない かつ マジックナンバーを排除目的で使用することが多く
Java起動直後から(は言い過ぎかもしれません)値が決定してあることのほうが自然だと思います。
なので本日の機能では対象外であることは当たり前なのかもしれませんね😅

今日はここまで!