markdown-it demo

lombok

pom.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

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

@Data
@AllArgsConstructor
@NoArgsConstrcutor
public class User {
    private Integer id;
    private String name;
}

same

@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 的例子:

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註釋的範例:

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對象。

Fork me on GitHub