Lombok

使用Lombok减少样板代码

使用lombok可以减少在应用程序中的许多部分中几乎没有改动的情况下重复的代码,通过简单的注释集来代替某些重复的代码

Lombok的使用

idea需要在file -> settings -> plugins中下载安装lombok插件

jar文件仍然需要包含在使用project lombok批注的任何项目的类路径中,maven用户可以将lombok作为依赖项添加到项目pom.xml文件中

<依赖项>
    <依赖性>
        <groupId > org.projectlombok </ groupId >
        <artifactId >龙目岛</ artifactId >
        <version > 0.9.2 </ version >
    </ dependency >
</ dependencies >
<存储库>
    <存储库>
        <id > projectlombok.org </ id >
        <url > http://projectlombok.org/mavenrepo </ url >
    </ repository >
</ repositories >

lombok的常用注释

@Getter和@Setter

@Getter和@Setter注解分别产生一个字段的获取和设置

正确生成的getter遵循布尔属性的约定,从而导致isFoo getter方法名称而不是getFoo任何boolean field foo。

如果带注释的字段所属的类包含与要生成的getter和setter同名的方法,则无论参数或返回类型如何,都不会生成相应的方法

两个@Getter和@Setter注释一个可选参数,来指定所生成的方法的访问级别,即

@Setter(AccessLevel.MODULE)
@Getter(AccessLevel.MODULE)

AccessLevel里面包含的属性有PUBLIC、MODULE、PROTECTED、PACKAGE、PRIVATE、NONE可以指定访问级别

@NoArgsConstructor

生成空参构造方法

@AllArgsConstructor

生成全部参数构造

@NonNull

@NonNull用来指示需要对相应成员进行快速失败的空检查,当放置在Lombok为其生成setter方法的字段上时,将提供null检查,如果提供null值,将导致NullPointerException异常

@RequiredArgsConstructor

将标记为@NotNull的属性生成一个构造器,如果运行中标记为@NotNull的属性为null,会抛出空指针异常

@NotNull 和@NotBlank

@NotBlank放在String类型的字段上面,其余类型的字段使用@NotNull,一般使用@NotNull和@NotBlank用来验证接收参数是否为空,如果为空,会报NullPointerException异常,message作为传参为空时的异常提醒

@NotBlank(message = "姓名不能为空")
private String name;

@ToString

生成所有属性的toString()方法

默认情况下,所有非静态字段都将以名称/值对的形式包含在方法的输出中。如果需要的话,在输出属性名称的夹杂物可以通过设置注释参数被抑制includeFieldNames到false

通过将特定字段包含在exclude参数中,可以从生成的方法的输出中排除特定字段,或者,该of参数可用于仅列出输出中所需的那些字段

toString通过将callSuper参数设置为,还可以包括超类方法的输出true

@ToString (callSuper = true,exclude = "price")
public class Foo{
    private  boolean someBoolean =  true ;
    private String name;
    private Float price;
}

@EqualsAndHashCode

导致Lombok生成equals和hashCode方法,这两者本质通过hashCode联系在一起

@EqualsAndHashCode(callSuper = true)

一般使用@EqualsAndHashCode注解的时候,是此类继承了父类,当设置callSuper为true时,请注意确保父类中的equals方法正确处理实例类型检查。如果父类检查该类是否为特定类型,而不仅仅是两个对象的类相同,则可能导致不良结果,如果超类使用的是Lombok生成的equals方法,那么这不是问题,但是,也有可能出现其他实现无法正常处理此情况

类似@ToString注解,通过将特定字段包含在exclude参数中,可以从生成的方法的输出中排除特定字段,或者,该of参数可用于仅列出输出中所需的那些字段

@EqualsAndHashCode (callSuper = true,exclude = { "地址",  "城市", "州", "邮编" } )

@Data

该注释结合了@Getter、@Setter、@ToString、@EqualsAndHashCode

@Data提供了可用于生成静态工厂方法的单个参数选项。将staticConstructor参数的值设置为所需的方法名称将导致Lombok将生成的构造函数设为私有,并公开给定名称的静态工厂方法

@Data (staticConstructor = "of")
public class company{
    private String name;
    private List<String> companyNames;
 }

@Cleanup

@Cleanup用来保证分配的资源被释放。当使用注释本地变量时,任何后续代码都将包装在一个try/finally块中,以确保在当前作用域的末尾调用cleanup方法(自动调用close方法关闭资源)

如果cleanup方法引发异常,它将抢占方法主题中引发的所有异常。这可能会导致问题的实际原因被覆盖,因此在选择使用Project Lombok的资源管理时应认真考虑。随着Java7中自动资源管理的兴起,这个特定的注释可能相对较短

public void testCleanUp() {
    try {
        @Cleanup ByteArrayOutputStream baos = new ByteArrayOutputStream();
        baos.write(new byte[] {'Y','e','s'});
        System.out.println(baos.toString());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

@ Synchronized

同步方法,在方法上使用@Synchronized注解可能会导致不幸,任何从事多线程的开发人员都可以证明

@SneakyThrows

@SneakyThrows是对检查异常的直接攻击(自动调用close方法关闭资源)

如果IllegalAccessException的throws字句中未列出或某些父类,则throwing通常会生成"未处理的异常"错误,如果使用了@SneakThrows注解,那么这个错误就消失了

默认情况下,@SneakyThrows将允许在不生命该throws字句的情况下引发任何检查的异常,通过为注释的类的value参数提供可抛出类的数组,可以将其限制为特定的一组异常

@Builder

构造Builder模式的结构,通过内部类Builder()进行构建对象

TestEntity testEntity = TestEntity.builder()
                    .name("java")
                    .age(18)
                    .build();

@Accessors

@Accessors(chain = true) 开启链式编程

StudentBean studentBean = new StudentBean().setAge(22).setName("ly");

@Value

与@Data相对应的@Value,两个annotation的主要区别就是如果变量不加@NonFinal,@Value会给所有的弄成final的,当然如果是final的话,就没有set方法了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值