lombok有参构造注解_Java高效开发工具: Lombok

Lombok是一个提升Java开发效率的工具,它通过注解自动添加getter、setter、equals、hashCode、toString等方法。@Data、@Getter、@Setter、@EqualsAndHashCode、@ToString、@AllArgsConstructor、@NoArgsConstructor、@NonNull和日志注解如@Log4j、@Slf4j等,帮助简化POJO类的构建和维护,减少手动修改代码的繁琐。在IDEA中,需要安装Lombok插件并配置相关依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

16ed0f5cdd5cc33ac625b472cc2a2004.png

Lombok, 一个Java开发必备效率工具,可以大大避免编写一些常用方法(get/set, hashcode等),简化开发。虽然现在IDE很多都可以通过快捷键生成POJO的一些方法了,但是如果该POJO字段发生变动后,还是需要程序员再次手动重新生成相关方法。而Lombok只需要使用注解即可,且是在代码编译期间将注解替换为相应的代码,而非通过反射。同时会使得源码文件更简洁

配置

IDEA环境下的的Lombok的配置:

1. 首先在Maven中添加Lombok包

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

2. 在IDEA的Plugins Marketplace 中搜索安装 IntelliJ Lombok plugin 插件

POJO 方法

POJO类的很多方法get、setequals、canEquals、hashCode、toStringConstructor 都可以通过Lombok的相关注解实现

@Data 注解

放置在类上,为该类的所有属性添加get、set方法,为该类添加equals、canEquals、hashCode、toString方法。非常适用于POJO类。

示例源码如下:

@Data
class Pc1 implements Serializable
{
    private static final long serialVersionUID = 1;
    private int id;
    private double prcie;
    private String pcname;
}

编译后class文件如下,可以看到提供了上述提到的所有方法,并且源码依然很简洁

a1c8bfd58b9813b31185355e34b0c4c2.png

Note:

如果无构造器方法,Java会提供一个默认的无参构造器。所以class文件中的那个无参构造器可不是Lombok的功劳哦~

@Getter, @Setter 注解

  • 放置在属性上,为该属性添加Get/Set方法

示例源码如下:

class Pc2 implements Serializable
{
    private static final long serialVersionUID = 1;
    private int id;
    @Setter
    private double prcie;
    @Getter
    private String pcname;
}

编译后class文件如下,可以看到字段上添加了相应的方法

bfe57d73f465f4239f68c7a6d9798abb.png
  • 放置在类上,则为该类的所有属性添加Get/Set方法

@EqualsAndHashCode 注解

放置在类上,为该类添加equals、canEqual、hashCode方法

示例源码如下:

@EqualsAndHashCode
class Pc5 implements Serializable
{
    private static final long serialVersionUID = 1;
    private int id;
    private double prcie;
    private String pcname;
}

编译后class文件如下,该类添加了equals、canEqual、hashCode方法

2de32493e0ca85579bc516b68bffa16b.png

@ToString 注解

放置在类上,为该类添加toString方法

示例源码如下:

@ToString
class Pc6
{
    private int id;
    private double price;
    private String pcname;
}

编译后class文件如下,该类添加了toString方法

415d4fd75dc13de427e02051539c3928.png

构造器: @AllArgsConstructor 注解

放置在类上,为该类添加一个全参构造器。需要注意的是:由于此时已经有构造器了,Java不再提供无参构造器

示例源码如下:

@AllArgsConstructor
class Pc3 implements Serializable
{
    private static final long serialVersionUID = 1;
    private int id;
    private double prcie;
    private String pcname;
}

编译后class文件如下,该类添加了一个全参构造器

620d6087842e5b7ffe593f4db56b413b.png

构造器: @NoArgsConstructor 注解

放置在类上,为该类添加一个无参构造器

示例源码如下:

@NoArgsConstructor
class Pc4 implements Serializable
{
    private static final long serialVersionUID = 1;
    private int id;
    private double prcie;
    private String pcname;
}

编译后class文件如下,该类添加了一个无参构造器

6e4de97d125eed95ec6cf0bb756d1924.png

@NonNull

放置在属性上,将对该属性进行非空检查,如果为空(null),将会抛出NullPointerException;同时为该类添加一个由所有@NonNull属性组成的有参构造器。需要注意的是:由于此时已经有构造器了,Java不再提供无参构造器

示例代码如下:

@Data
class Pc7
{
    @NonNull
    private Integer id;
    private double price;
    private String pcname;
}

编译后class文件如下,该类中对id属性的操作均进行了非空检查,添加了一个所有@NonNull属性组成(id属性)的有参构造器

7aee254f74985947ef7db06643aa9c8a.png

@RequiredArgsConstructor 注解 简化依赖注入

通常我们在实现Spring依赖注入,常常是在需要注入的属性添加@Autowired注解实现(如下所示)。但如果一个类下有很多属性需要注入时,@Autowired就要写一堆了……

...
    @Controller
    public class Controller1{
        @Autowired
        private Service1 service1;
        @Autowired
        private Service2 service2;
        ...
    }

这里可以使用这里@RequiredArgsConstructor注解来简化依赖注入操作:首先需要将该注解放在类上,然后在 需要注入的属性前添加final(用法1) 或 在需要注入的属性上添加注解@NonNull(用法2)

对上述示例的改进写法如下:

...
    @RequiredArgsConstructor(onConstructor = @__(@Autowired))
    @Controller
    public class Controller1{
        // 用法 1
        private final Service1 service1;
        // 用法 2
        @NonNull
        private Service2 service2;
        ...
    }

用法1 和 用法2 虽然效果一样,但是很明显用法1更常用……

log对象

@Log4j

放置在类上,为该类添加一个属性名为log的Log4J日志对象

示例源码如下:

@Log4j
    public class Student {        
        private int id;
        private String username;
        private String sex;
        private String address;
        ...
    }

编译后的class文件如下,该类添加了一个属性名为log的Log4J日志对象

24125e469064ab7c7be09410f0617c0f.png

@Slf4j

放置在类上,为该类添加一个属性名为log的SLF4J日志对象

示例源码如下:

import lombok.extern.slf4j.Slf4j;
    @Slf4j
    public class User {
        private int id;
        private String name;
        private int age;

        public int getAge() {
            log.error("SLF4J getAge: " + age );
            log.debug("SLF4J getAge: " + age );
            return age;
        }
        ...
    }

编译后的class文件如下,该类添加了一个属性名为log的SLF4J日志对象

bf5447a8649371f0db926f452a6c690d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值