Lombok的使用

IntelliJ 安装 Lombok

Lombok 注解大全说明

  • @NonNull:给方法参数增加这个注解,会自动在方法内对该参数进行是否为空的校验,如果为空,则抛出 NPE(NullPointerException)

  • @Getter/@Setter:用在属性上,再也不用自己手写 setter 和 getter 方法了,还可以指定访问范围

  • @ToString:用在类上,可以自动覆写 toString 方法,当然还可以加其他参数,例如@ToString(exclude=”id”)排除 id 属性,或者@ToString(callSuper=true, includeFieldNames=true)调用父类的 toString 方法,包含所有属性

  • @EqualsAndHashCode:用在类上,自动生成 equals 方法和 hashCode 方法

  • @NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:用在类上,自动生成无参构造和使用所有参数的构造函数以及把所有@NonNull 属性作为参数的构造函数,如果指定 staticName = “of”参数,同时还会生成一个返回类对象的静态工厂方法,比使用构造函数方便很多

  • @Data:注解在类上,相当于同时使用了@ToString、@EqualsAndHashCod- e、@Getter、@Setter 和@RequiredArgsConstrutor 这些注解,对于 POJO 类十分有用

  • @Value:用在类上,是@Data 的不可变形式,相当于为属性添加 final 声明,只提供 getter 方法,而不提供 setter 方法

  • @Builder:用在类、构造器、方法上,为你提供复杂的 builder APIs,让你可以像如下方式一样调用 Person.builder().name("Adam Savage").city("San Francisco").job("Mythbusters").job("Unchained Reaction").build();更多说明参考 Builder

  • @Getter(lazy=true):可以替代经典的 Double Check Lock 样板代码

  • @Log:根据不同的注解生成不同类型的 log 对象,但是实例名称都是 log,有六种可选实现

@CommonsLog Creates log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);

@Log Creates log = java.util.logging.Logger.getLogger(LogExample.class.getName());

@Log4j Creates log = org.apache.log4j.Logger.getLogger(LogExample.class);

@Log4j2 Creates log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);

@Slf4j Creates log = org.slf4j.LoggerFactory.getLogger(LogExample.class);

@XSlf4j Creates log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

代码示例

@NonNull 

import lombok.NonNull;

public class Person {
    private String name;
    private int age;

    public Person(@NonNull String name, int age) {
        this.name = name;
        this.age = age;
    }

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

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

测试类:

public class Main {
    public static void main(String[] args) {
        try {
            // 传入 null,会抛出 NullPointerException
            Person person1 = new Person(null, 25);
        } catch (NullPointerException e) {
            System.out.println("Caught NullPointerException for person1: " + e.getMessage());
        }

        Person person2 = new Person("John", 30);
        try {
            // 调用 setName 方法传入 null,会抛出 NullPointerException
            person2.setName(null);
        } catch (NullPointerException e) {
            System.out.println("Caught NullPointerException for person2: " + e.getMessage());
        }
    }
}

@EqualsAndHashCode 

import lombok.EqualsAndHashCode;

@EqualsAndHashCode
public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter 和 Setter 可以根据需要添加
}

测试类:

public class Main {
    public static void main(String[] args) {
        Person person1 = new Person("John", 25);
        Person person2 = new Person("John", 25);
        Person person3 = new Person("Jane", 30);

        // 使用 Lombok 生成的 equals() 方法进行比较
        System.out.println("person1 equals person2: " + person1.equals(person2)); // 应输出 true
        System.out.println("person1 equals person3: " + person1.equals(person3)); // 应输出 false

        // 使用 Lombok 生成的 hashCode() 方法进行比较
        System.out.println("person1 hashCode: " + person1.hashCode());
        System.out.println("person2 hashCode: " + person2.hashCode());
        System.out.println("person3 hashCode: " + person3.hashCode());
    }
}

 运行结果:

person1 equals person2: true
person1 equals person3: false
person1 hashCode: <hash_code_value_1>
person2 hashCode: <hash_code_value_1>
person3 hashCode: <hash_code_value_2>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值