網頁

2020/8/14

Lombok @UtilityClass

Lombok lombok.experimental.UtilityClassv1.16.2推出的實驗功能,使用方法如下。

專案中通常會設計一些工具類別來處理常碰到的一些問題,例如字串處理、格式轉換、日期時間轉換、加解密、檔案處理、文字解析等。這些問題通常是單純的計算及資料轉換,因此工具類別為無狀態並只提供公開靜態方法讓客戶端使用,特色包括:

  • 不需實例化
  • 不能被繼承
  • 無狀態
  • 只提供靜態方法

參考「工具類別(Utility Class)的設計」。

而Lombok的@UtilityClass可套在類別名稱前使成為具有上述特色的工具類。

例如下面的一般類別UtilityClassDemo套上@UtilityClass

UtilityClassDemo

import lombok.experimental.UtilityClass;

@UtilityClass
public class UtilityClassDemo {

    private final int CONSTANT = 5;
    
    public int add(int in) {
        return in + CONSTANT;
    }
}

Lombok會將@UtilityClass類別的建構式編譯為private,且所有的成員(屬性及方法)編譯為static

UtilityClassDemo

public final class UtilityClassDemo {

    private static final int CONSTANT = 5;
    
    private UtilityClassDemo() {
        throw new java.lang.UnsupportedOperationException("This is a utility class and cannot be instantiated");
    }
    
    public static int add(int in) {
        return in + CONSTANT;
    }
}

@UtilityClass目前(v 1.18.12)仍屬實驗階段,所以package為lombok.experimental


沒有留言:

張貼留言