Java lombok 详解

使用原因

项目中经常使用bean,entity等类,绝大部分数据类类中都需要get、set、toString、equals和hashCode方法,虽然eclipse和idea开发环境下都有自动生成的快捷方式,但自动生成这些代码后,如果bean中的属性一旦有修改、删除或增加时,需要重新生成或删除get/set等方法,给代码维护增加负担。而使用了lombok则不一样,使用了lombok的注解(@Setter,@Getter,@ToString,@@RequiredArgsConstructor,@EqualsAndHashCode或@Data)之后,就不需要编写或生成get/set等方法,很大程度上减少了代码量,而且减少了代码维护的负担。故强烈建议项目中使用lombok,去掉bean中get、set、toString、equals和hashCode等方法的代码。

安装lombok插件:


                                         

         

          

添加lombok的maven的pom.xml依赖:      

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

常用的 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 要简洁许多

添加lombok的maven的pom.xml依赖:    

 <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()

参考: 
http://projectlombok.org/features/index
http://blog.csdn.net/hack8/article/details/23790579 
http://blog.csdn.net/ethanq/article/details/7185610 [builder模式设计]

猜你喜欢

转载自blog.csdn.net/bestkilly/article/details/80816256
今日推荐