lombok

Posted by Adam on August 24, 2022
### [lombok](https://kucw.github.io/blog/2020/3/java-lombok/) pom.xml ```xml <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> <scope>provided</scope> </dependency> ``` build.gradle ```groovy repositories { mavenCentral() } dependencies { compileOnly 'org.projectlombok:lombok:1.18.26' annotationProcessor 'org.projectlombok:lombok:1.18.26' testCompileOnly 'org.projectlombok:lombok:1.18.26' testAnnotationProcessor 'org.projectlombok:lombok:1.18.26' } ``` ### @Data ```java @Data @AllArgsConstructor @NoArgsConstrcutor public class User { private Integer id; private String name; } ``` same ```java @Getter @Setter @ToString @EqualsAndHashCode @RequiredArgsConstructor @AllArgsConstructor @NoArgsConstructor public class User { private Integer id; private String name; } ``` --- `@Accessors` 是 Lombok(一個 Java 庫)提供的一個注解,它用於配置訪問器(accessors)。通常,當我們使用 Lombok 的 `@Data` 注解時,它會自動為類生成 getter、setter、toString 等方法,但有時我們可能需要更精細地配置這些訪問器的行為。`@Accessors` 就提供了這樣的配置功能。 以下是一個簡單的使用 `@Accessors` 的例子: ```java import lombok.Getter; import lombok.Setter; import lombok.ToString; import lombok.experimental.Accessors; @Accessors(chain = true) // 啟用鏈式調用 @ToString public class Person { // 自動生成 getter 和 setter 方法 @Getter @Setter private String name; // 自動生成 getter 方法,但不生成 setter 方法 @Getter(lazy = true) private String lazyName = computeLazyName(); private String computeLazyName() { // 複雜的計算邏輯,此方法只有在真正調用 getter 時才會執行 System.out.println("Calculating lazy name..."); return "LazyName"; } public static void main(String[] args) { // 使用鏈式調用 Person person = new Person().setName("John").setLazyName("LazyName"); System.out.println(person); } } ``` 在這個例子中,我們使用了 `@Accessors(chain = true)` 來啟用鏈式調用。這使得我們可以在一條語句中連續調用多個 setter 方法,這提高了代碼的可讀性。 `@Getter` 和 `@Setter` 依然用於自動生成 getter 和 setter 方法。在 `lazyName` 字段上,我們使用了 `@Getter(lazy = true)`,這表示自動生成懶加載(lazy)的 getter 方法。懶加載的 getter 方法中的 `computeLazyName()` 方法只有在真正調用 getter 時才會執行。 最後,`@ToString` 是 Lombok 提供的另一個注解,它自動生成 `toString` 方法,方便調試時查看對象的內容。 總的來說,`@Accessors` 讓你可以更靈活地配置訪問器的行為,以滿足特定需求。 --- ### @Builder 下面是一個使用lombok的@Builder註釋的範例: ```java import lombok.Builder; import lombok.Getter; @Getter @Builder public class User { private String name; private int age; private String email; } public class Main { public static void main(String[] args) { User user = User.builder() .name("Alice") .age(25) .email("alice@example.com") .build(); System.out.println("Name: " + user.getName()); System.out.println("Age: " + user.getAge()); System.out.println("Email: " + user.getEmail()); } } ``` 在這個範例中,我們使用@Builder註釋來自動生成一個builder模式的建造者類,讓我們可以方便地創建對象。在Main類中,我們使用User.builder()方法來創建User對象,然後使用builder()方法設置屬性的值,最後使用build()方法來建構User對象。