欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

lombok常用注解及使用方法

程序员文章站 2024-03-12 21:23:45
...

一、安装lombok

  1. idea下载lombok插件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J6KGQJr4-1595238053124)(/Users/qicheng/Library/Application Support/typora-user-images/image-20200720155303416.png)]

  2. 添加依赖

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

二、变量

@NonNull

作用于方法参数上

Lombok将在方法/构造函数体的开头插入一个空检查,并将参数的名称作为消息引发一个NullPointerException

作用于字段上

对该字段进行判空校验

@NonNull private String t;

private A(String t) {
    if (t == null) throw new NullPointerException("description");
    this.t = t;
  }

三、实体类

@Setter

生成setter方法,final变量不包含

@Getter

生成getter方法,final变量不包含

@RequiredArgsConstructor

可以生成带参或者不带参的构造方法。若带参数,只能是类中所有带有 @NonNull注解的和以final修饰的未经初始化的字段**

@AllArgsConstructor

使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数。在加上@AllArgsConstructor 时,一定要补上 @NoArgsConstrcutor

@NoArgsConstructor

使用后创建一个无参构造函数

@ToString

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

@EqualsAndHashCode

生成equals()方法和hashCode方法

@Data

@[email protected][email protected][email protected][email protected]

使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在编译时会自动加进去。

特有的静态方法:String staticConstructor() default “”;

@Data(staticConstructor=“add”)
通过新的方式来创建实例:Tel.add(0)

@Value

不可变的@Data,所有字段由private和final修饰,不会产生setter方法。类本身也是由final修饰。

@Builder

Builder的作用之一是为了解决在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦,在设计模式中的思想是:用一个内部类去实例化一个对象,避免一个类出现过多构造函数

//原始类
@Builder
public class TestEntity {
 
    private String name;
 
    private Integer age;
 
    private final String type = "person";
}
//反编译的类
public class TestEntity {
    private String name;
    private Integer age;
    private final String type = "person";
 
    @ConstructorProperties({"name", "age"})
    TestEntity(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
 
    public static TestEntity.TestEntityBuilder builder() {
        return new TestEntity.TestEntityBuilder();
    }
 
    public static class TestEntityBuilder {
        private String name;
        private Integer age;
 
        TestEntityBuilder() {
        }
 
        public TestEntity.TestEntityBuilder name(String name) {
            this.name = name;
            return this;
        }
 
        public TestEntity.TestEntityBuilder age(Integer age) {
            this.age = age;
            return this;
        }
 
        public TestEntity build() {
            return new TestEntity(this.name, this.age);
        }
 
        public String toString() {
            return "TestEntity.TestEntityBuilder(name=" + this.name + ", age=" + this.age + ")";
        }
    }
}
 
//Builder模式使用方法
@Test
public  void test(){
    TestEntity testEntity = TestEntity.builder()
                    .name("java")
                    .age(18)
                    .build();
}

@Slf4j

自动生成该类的 log 静态常量,日志可直接打印

@Synchronized

用在类方法或者实例方法上,效果和synchronized关键字相同,区别在于锁对象不同,对于类方法和实例方法,synchronized关键字的锁对象分别是类的class对象和this对象,而@Synchronized得锁对象分别是私有静态final对象lock和私有final对象lock和私有final对象lock

四、代码块

@Cleanup

自动资源管理:自动调用关闭资源方法,默认是调用close()方法,在finally块中,只有在给定资源不是null的情况下才会调用清理方法

@Cleanup InputStream in = new FileInputStream();