简介:

  Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率。例如开发中经常需要写的javabean,都需要花时间去添加相应的getter/setter,也许还要去写构造器、equals等方法,而且需要维护,当属性多时会出现大量的getter/setter方法,这些显得很冗长也没有太多技术含量,一旦修改属性,就容易出现忘记修改对应方法的失误。

  Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。出现的神奇就是在源码中没有getter和setter方法,但是在编译生成的字节码文件中有getter和setter方法。这样就省去了手动重建这些代码的麻烦,使代码看起来更简洁些。

@Data

  @Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。

@Getter/@Setter

  自动生成Getter/Setter方法

@NonNull

  非空的声明,可用于校验参数,能帮助避免空指针

  用法:

public class NonNullExample extends Something {
private String name; public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
}

  类似于:

 public class NonNullExample extends Something {
private String name; public NonNullExample(Person person) {
super("Hello");
if (person == null) {
throw new NullPointerException("person");
}
this.name = person.getName();
}
}

@Cleanup

  自动调用close方法,常用于文件读写

  如:

 @Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream("asdaads");

@ToString

  生成 toString()方法

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor

  参数(Args)构造器(constructor)

@EqualsAndHashCode(不做介绍)

  会使用所有非静态(non-static)和非瞬态(non-transient)属性来生成equals和hasCode,也能通过exclude注解来排除一些属性。

优点:

  1. 能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,提高了一定的开发效率
  2. 让代码变得简洁,不用过多的去关注相应的方法
  3. 属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等

缺点:

  1. 不支持多种参数构造器的重载
  2. 虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度

最新文章

  1. 新手如何在gdb中存活
  2. mac上使用imagealpha命令对图片进行压缩批处理
  3. Android课程---Activity 的生命周期
  4. Source Insight 使用
  5. Hadoop平台提供离线数据和Storm平台提供实时数据流
  6. 1106关于解决erp单个商品同步的问题
  7. MyEclipse2014不支持jre1.8吗
  8. mysql 优化方法
  9. Zabbix实战-简易教程--正则(Regxp)
  10. Maven版本不一致的时候,使用指定版本进行编译
  11. 利用redis List队列简单实现秒杀 PHP代码实现
  12. Flask 应用上下文
  13. vitas高音
  14. leetcode16—3 Sum Closet
  15. 【linux】扒站命令之利用wget快速扒站利用wget快速扒站
  16. .net/c# RabbitMQ 连接断开处理-断线重连(转载)
  17. C#——JSON操作类简单封装(DataContractJsonSerializer)
  18. 每天一个linux命令(网络):【转载】route命令
  19. socket的protocal参数
  20. 亿级别记录的mongodb分页查询java代码实现

热门文章

  1. BZOJ 2069 POI2004 ZAW 堆优化Dijkstra
  2. [shell] Bash编程总结
  3. Vue实例和方法
  4. WebDriver API——延时操作及元素等待
  5. ssh整合 小例子
  6. Java中String args[]起什么作用?
  7. BZOJ_2002_[Hnoi2010]Bounce 弹飞绵羊_LCT
  8. [TJOI 2018] XOR
  9. 一个表格中选定的tr,显示在另一个表格中
  10. POJ3261(后缀数组+2分枚举)