1. 程式人生 > >Java Lombok @Data @Builder

Java Lombok @Data @Builder

常用的 lombok 註解

@EqualsAndHashCode:實現equals()方法和hashCode()方法 @ToString:實現toString()方法
@Data :註解在類上;提供類所有屬性的 getting 和 setting 方法,此外還提供了equals、canEqual、hashCode、toString 方法
@Setter:註解在屬性上;為屬性提供 setting 方法
@Getter:註解在屬性上;為屬性提供 getting 方法
@Log4j :註解在類上;為類提供一個 屬性名為log 的 log4j 日誌物件
@NoArgsConstructor:註解在類上;為類提供一個無參的構造方法
@AllArgsConstructor:註解在類上;為類提供一個全參的構造方法
@Cleanup:關閉流 @Synchronized:物件同步 @SneakyThrows:丟擲異常

@Data

不使用 lombok 的方案

public class Person {

 private String id;
 private String name;
 private String identity;
 private Logger log = Logger.getLogger(Person.class);
 public Person() {
   }
 public Person(String id, String name, String identity) {
      this.id   = id;
      this.name = name;
      this
.identity = identity; } public String getId() { return id; } public String getName() { return name; } public String getIdentity() { return identity; } public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public
void setIdentity(String identity) { this.identity = identity; } }

使用 lombok 的方案

 @Data
 @Log4j
 @NoArgsConstructor
 @AllArgsConstructor
 public class Person {
 private String id;
 private String name;
 private String identity;
}

上面的兩個 java 類,從作用上來看,它們的效果是一樣的,相比較之下,很明顯,使用 lombok 要簡潔許多

 <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
 </dependency>

@Builder

不使用 lombok 的方案

public class Example<T> {
        private T foo;
        private final String bar;

        private Example(T foo, String bar) {
                this.foo = foo;
                this.bar = bar;
        }

        public static <T> ExampleBuilder<T> builder() {
                return new ExampleBuilder<T>();
        }

        public static class ExampleBuilder<T> {
                private T foo;
                private String bar;

                private ExampleBuilder() {}

                public ExampleBuilder foo(T foo) {
                        this.foo = foo;
                        return this;
                }

                public ExampleBuilder bar(String bar) {
                        this.bar = bar;
                        return this;
                }

                @java.lang.Override 
                public String toString() {
                        return "ExampleBuilder(foo = " + foo + ", bar = " + bar + ")";
                }

                public Example build() {
                        return new Example(foo, bar);
                }
        }
 }

使用 lombok 的方案 guava 16.0.1

@Builder
 public class Example {
        private int foo;
        private final String bar;
 }

構造一個例項,屬性不需要單獨set
Example.builder().foo(1).bar(“test”).build()