Lombokの@UtilityClass(lombok.experimental.UtilityClass)アノテーションの利用サンプルです。
Javaでユーティリティ用のクラスを作成する際には、一般的に以下のようなコードを記述する必要があります
- クラスは継承されないようにfinalにする
- インスタンス化される意味がないので、コンストラクタをprivateにする
- staticメソッドのみを定義する
クラスに@UtilityClass
アノテーションを付与することで上記のようなコードの記述を簡略化できます。
@UtilityClass
は所属パッケージが"experimental"になっており、その名の通り実験的なアノテーションです。
そのため、今後Lombokのバージョンが上がった際などに仕様が変更される可能性もあると思われます。
■@UtilityClassを付与したクラス
import lombok.experimental.UtilityClass; @UtilityClass public class SomeUtils { public static void printData1(String s) { System.out.println(s); } static void printData2(String s) { System.out.println(s); } public void someFunction(String s) { printParam(s); } private void printParam(String s) { System.out.println(s); } }
■実際に生成されるソースコード
クラスが以下の状態になっていることが分かります
- クラスがfinalになっている
- デフォルトコンストラクタがprivateになっている
- メソッドが全てstaticになっている
public final class SomeUtils { public static void printData1(String s) { System.out.println(s); } static void printData2(String s) { System.out.println(s); } public static void someFunction(String s) { printParam(s); } private static void printParam(String s) { System.out.println(s); } private SomeUtils() { throw new UnsupportedOperationException("This is a utility class and cannot be instantiated"); } }