ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java Lombok插件

2021-07-19 17:34:25  阅读:204  来源: 互联网

标签:插件 java 生成 Getter 使用 注解 Lombok 属性


@Lombok有啥牛皮的?SpringBoot和IDEA官方都要支持它!

https://www.jianshu.com/p/2543c71a8e45

官方文档:https://projectlombok.org/features/all

IDEA 2020最后一个版本已经内置了Lombok插件,SpringBoot 2.1.x之后的版本也在Starter中内置了Lombok依赖。

使用后 getter/setter/toString;异常处理;I/O流的关闭操作等等,只需要一个注释就可以搞定

1、maven
<!--lombok依赖-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
    <scope>provided</scope>
</dependency>

SpringBoot 2.1.x版本后无需指定Lombok版本,SpringBoot在spring-boot-dependencies中已经内置。

2、Lombok注解的使用

val

使用val注解可以取代任意类型作为局部变量,这样我们就不用写复杂的ArrayList和Map.Entry类型了,具体例子如下。

//val代替ArrayList<String>和String类型
        val example = new ArrayList<String>();

//val代替Map.Entry<Integer,String>类型
        val map = new HashMap<Integer, String>();

当我们使用了val注解后,Lombok会从局部变量的初始化表达式推断出具体类型

@NonNull

在方法上使用@NonNull注解可以做非空判断,如果传入空值的话会直接抛出NullPointerException。

 public NonNullExample(@NonNull String name){
        this.name = name;
 }

编译后会在构造器中添加非空判断

@Cleanup

当我们在Java中使用资源时,不可避免地需要在使用后关闭资源。使用@Cleanup注解可以自动关闭资源。

//使用输入输出流自动关闭,无需编写try catch和调用close()方法
        @Cleanup ByteArrayInputStream in = new ByteArrayInputStream(inStr.getBytes("UTF-8"));
        @Cleanup ByteArrayOutputStream out = new ByteArrayOutputStream();

@Getter/@Setter

有了@Getter/@Setter注解,我们再也不用编写getter/setter方法了。

    @Getter
    @Setter

    private String name;
    @Getter
    @Setter(AccessLevel.PROTECTED)

    private Integer age;

@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法;作用于成员变量上,生成该成员变量的getter/setter方法。可以设定访问权限及是否懒加载等。

@Getter(lazy=true)

当我们获取某一个属性比较消耗资源时,可以给@Getter添加lazy=true属性实现懒加载,会生成Double Check Lock 样板代码对属性进行懒加载。

@ToString

把所有类属性都编写到toString方法中方便打印日志,是一件多么枯燥无味的事情。使用@ToString注解可以自动生成toString方法,默认会包含所有类属性,使用@ToString.Exclude注解可以排除属性的生成,该属性不在tostring中显示。可以通过of属性限定显示某些字段。

@ToString
public class ToStringExample {
    @ToString.Exclude
    private Long id;
    private String name;
    .....
}

@EqualsAndHashCode

使用@EqualsAndHashCode注解作用于类可以自动生成hashCode和equals方法,默认包含所有类属性,使用@EqualsAndHashCode.Exclude可以排除属性的生成。

@XxConstructor

自动生成构造方法,有三个注解可以使用。

  • @NoArgsConstructor:生成无参构造函数。

  • @RequiredArgsConstructor:生成包含必须参数的构造函数,使用@NonNull注解的类属性为必须参数。有@NonNull注解的类属性,的构造器

  • @AllArgsConstructor:生成包含所有参数的构造函数。

有staticName、access等属性,staticName属性一旦设定,将采用静态方法的方式生成实例,access属性可以限定访问权限。

@NoArgsConstructor
@RequiredArgsConstructor(staticName = "of")
@AllArgsConstructor
public class ConstructorExample {...}

@Data:作用于类上,是以下注解的集合:@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor

@Builder:作用于类上,将类转变为建造者模式

@Log:作用于类上,生成日志变量。针对不同的日志实现产品,有不同的注解:

其他重要注解:

@Cleanup:自动关闭资源,针对实现了java.io.Closeable接口的对象有效,如:典型的IO流对象

@Value:使用@Value注解可以把类声明为不可变的,声明后此类相当于final类,无法被继承,其属性也会变成final属性。

@SneakyThrows:自动实现捕获并抛出异常,用在方法前,相当于对方法中的代码块实行了try-catch操作,可以指定异常类

@Synchronized:作用于方法级别,可以替换synchronize关键字或lock锁,用处不大.

@With

使用@With注解可以实现对原对象进行克隆,并改变其一个属性。即,生成一个改变了其中一个属性的新对象。

使用时需要指定全参构造方法,@AllArgsConstructor

@With
@AllArgsConstructor
public class WithExample {
    private Long id;
    private String name;
    private Integer age;

    public static void main(String[] args) {
        WithExample example1 = new WithExample(1L, "test", 20);
        WithExample example2 = example1.withAge(22);
        //将原对象进行clone并设置age,返回false
        System.out.println(example1.equals(example2));
    }
}

@Log

使用@Log注解在类上,可以直接生成日志对象log,通过log对象可以直接打印日志。

@Slf4j

使用Lombok生成日志对象时,根据使用日志实现的不同,有多种注解可以使用。比如@Log、@Log4j、@Log4j2、@Slf4j等。

标签:插件,java,生成,Getter,使用,注解,Lombok,属性
来源: https://blog.csdn.net/qq_40197728/article/details/118900484

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有