Lombok代码生成注解说明

     lombok 提供了简单的注解的形式来帮助提高开发效率、减少了大量冗余代码(一般可以节省60%-70%以上的代码)使代码直观明了,同时极大减少后期维护成本。通过使用对应的注解,可以在编译源码的时候生成对应的方法,以不会影响任何运行效率

maven中应用jar:

<dependency>

  <groupId>org.projectlombok</groupId

  <artifactId>lombok</artifactId>

  <version>1.16.18</version

</dependency>

常用的 lombok 注解说明:

@Data注解在类上;包含了@ToString,@EqualsAndHashCode,@Getter / @Setter和

            @RequiredArgsConstructor的功能,提供类所有属性的 getter 和 setter 方法,此外还提供了

            equals、 canEqual、hashCode、toString 方法,它可以使用@Data(staticConstructor=”methodName”)来生成一个静态方法,返回一个调用相应的构造方法产生的对象。

@Setter:注解在属性上;为属性提供 setter 方法

@Getter:注解在属性上;为属性提供 getter 方法

@ToString:注解在类上;生成toString()方法,默认情况下,它会按顺序(以逗号分隔)打印你的类名称以及每个字段。可以这样设置不包含哪些成员变量@ToString(exclude = "id") / @ToString(exclude = {"id","name"}),@ToString(of={“id”,“name”})来包含那些成员变量。如果继承的有父类的话,可以设置callSuper 让其调用父类的toString()方法,例如:@ToString(callSuper = true)

@EqualsAndHashCode:注解在类上;生成hashCode()和equals()方法,默认情况下,它将使用所有非静态,非transient成员变量。但可以通过在可选的exclude参数中来排除更多字段。或者,通过在parameter参数中命名它们来准确指定希望使用哪些成员变量(同@ToString)。

@NonNull:  注解在属性上;标识属性是不能为空,为空则抛出异常。

@Slf4j :注解在类上;根据用户实际使用的日志框架生成log日志对象。

@Log4j :注解在类上;为类提供一个 属性名为log 的 log4j 日志对象

@NoArgsConstructor:注解在类上;为类提供一个无参的构造方法。当类中有final字段没有被初始化时,编译器会报错,此时可用@NoArgsConstructor(force = true),然后就会为没有初始化的final字段设置默认值 0 / false / null。对于具有约束的字段(例如@NonNull字段),不会生成检查或分配,因此请注意,正确初始化这些字段之前,这些约束无效(成员变量都是非静态的,如果类中含有final修饰的成员变量,是无法使用@NoArgsConstructor注解的。 )。

@AllArgsConstructor:注解在类上;为类提供一个全参的构造方法默认生成的方法是public的,如果要修改方法修饰符可以设置AccessLevel的值(成员变量都是非静态),例如:@Getter(access = AccessLevel.PROTECTED)

@RequiredArgsConstructor:注解在类上;会生成构造方法(可能带参数也可能不带参数),如果带参数,这参数只能是以final修饰的未经初始化的字段,或者是以@NonNull注解的未经初始化的字段@RequiredArgsConstructor(staticName = "of")会生成一个of()的静态方法,并把构造方法设置为私有的(成员变量都是非静态)

@Cleanup 这个注解用在 变量 前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的 close() 方法,如果该资源有其它关闭方法,可使用 @Cleanup(“methodName”) 来指定要调用的方法

@Value这个注解用在 上,它会把所有成员变量默认定义为private final修饰,并且不会生成set方法,此外还提供了equals、hashCode、toString 方法。

@SneakyThrows这个注解用在 方法 上,可以将方法中的代码用 try-catch 语句包裹起来,捕获异常并在 catch 中用 Lombok.sneakyThrow(e) 把异常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪种异常。

@Synchronized这个注解用在 类方法 或者 实例方法 上,效果和 synchronized 关键字相同,区别在于锁对象不同,对于类方法和实例方法,synchronized 关键字的锁对象分别是类的 class 对象和 this 对象,而 @Synchronized 的锁对象分别是 私有静态 final 对象 lock 和 私有 final 对象 lock,当然,也可以自己指定锁对象(如@Synchronized("readLock"))。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值