Lombok常见用法总结——@Data,@Getter,@Setter,@NotNull,@ToString,@HashCode,@Builder等

一、下载和安装

在idea中下载安装设置enable即可在这里插入图片描述

二、常见注释

(一)@Data

注在类上, 是@ToString, @EqualsAndHashCode, @Getter, @Setter和@NoArgsConstructor的结合。
提供无参构造器,get方法,set方法,重写hashCode,equals,toString方法。

Aoo aoo = new Aoo();
aoo.setAttr3(true);
aoo.setAttr2("2222");
System.out.println(aoo.toString()+aoo.getAttr2());
Aoo aoo2 = new Aoo();
System.out.println(aoo.equals(aoo2)+"----");
@Data
public class Aoo {
    
    

    private String attr1;

    private String attr2;

    private boolean attr3;

}

注意,@Data只提供无参构造器,没有全参构造器,如果需要无参构造器和全参构造器则需要将这几个注释同时使用

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Aoo {
    
    
    private String attr1;
    
    private String attr2;

    private boolean attr3;
}

(二)@Getter和@Setter

既可以用在类上,也可以用在单独的属性上。

// @Getter可以用在实体类上
// @Setter
public class Aoo {
    
    
    private String attr1;
    private String attr2;
    @Getter
    @Setter
    private boolean attr3;
}

如果类没有使用@Data,那么可以单独需要get和set方法的属性进行设置。
并且,如果使用了boolean 类的属性,那么使用的时候,如下:

Aoo aoo = new Aoo();
aoo.setAttr3(true);
// 这里不再是getAttr3(),而是isAttr3()
System.out.println(aoo.isAttr3());

所以,如果类已经标注了@Data,就不用再使用@Setter和@Getter了。

@Getter和@Setter可以设置访问级别(默认为public)(搞不懂的去回忆一下访问修饰符)
例如:@Setter(AccessLevel.PROTECTED)

  • AccessLevel.PUBLIC, //所有类可以访问
  • AccessLevel.MODULE, // 同模块的可以访问
  • AccessLevel.PROTECTED, // 只有子类可以访问
  • AccessLevel.PACKAGE,// 只有同包可以访问
  • AccessLevel.PRIVATE, // 只有本类可以访问
  • AccessLevel.NONE; // 都不让访问

(三)@NonNull和@NotNull(不常用)

将在方法/构造函数体的开头插入一个空检查,抛出一个带有参数名称的NullPointerException作为消息。
这两个真的不常用,我一般用@Validate来限制字段不能为空

(四)@ToString(不常用)

自定义对象的toString方法
其中有一个属性exclude,代表被排除的属性,toString的时候,排除该属性
其中还有一个属性of,代表被包含的属性,toString的时候,只需要那些属性

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString(callSuper = true,exclude = "attr1")
public class Aoo {
    
    
    private String attr1;

    private String attr2;

    private boolean attr3;
    
}

(五)@EqualsAndHashCode

重写equals和hashCodef方法,
其中的exclude属性代表需要排除的equals和hashcode的属性有哪些。
其中of属性代表需要计入的属性有哪些。

@Data
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode(exclude = {
    
    "attr1","attr2"})
public class Aoo {
    
    
    private String attr1;

    private String attr2;

    private boolean attr3;

}

注意:但是一般不怎么用这个,会在stream留里面自定义比较器

(六)@Cleanup(很实用但是很小众)

在用一些输入输出流需要在finally中关闭的时候,如果添加了这个注解,就可以不写fanally了

String file = "XXX/XXX/XXX.zip";
File file1 = new File(file);
try{
    
    
	// 如果此处使用了@Cleanup,就可以不写finally了,在流使用完后自动关闭
	@Cleanup FileInputStream fis = new FileInputStream(file1);
	int c;
    while ((c = fis.read()) > 0) {
    
    
        // 业务逻辑
    }
}catch{
    
    
	throw new XXXEXception("XXXXXXX");
}finally{
    
    
	fis.close();
}

(七)构造器注释@AllArgsConstructor和@NoArgsConstructor和@RequiredArgsConstructor

  • @AllArgsConstructor 全参构造器,
  • @NoArgsConstructor提供无参构造器
    有一个很容易报错的点:如果一个类没有会成员变量,同时使用了@AllArgsConstructor和- - @NoArgsConstructor会报错构造器重复的错
  • @RequiredArgsConstructor 生成带有所需参数的构造函数。
    这个不常用

(八)@Builder

让实体类使用构造者模式创建对象

@Data
@Builder
public class Aoo {
    
    
    private String attr1;

    private String attr2;

    private boolean attr3;

}
public static void main(String[] args){
    
    
        Aoo aoo = Aoo.builder().attr1("attr1").attr2("attr2").attr3(true).build();
        System.out.println(aoo+"----");
    }

(九)@val

类型将从初始化表达式中推断出来。

@val
public class Aoo {
    
    
    private void doIt(){
    
    
    	// 类型将从初始化表达式中推断出来
        val name = "张三";
        val type = 2;
        System.out.println(name+type);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_44712778/article/details/129365532