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
@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
讓你可以更靈活地配置訪問器的行為,以滿足特定需求。
下面是一個使用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對象。