Advertisement

IDEA下lombok的安装和使用

阅读量:

一、简介

Lombok是一种功能强大的Java工具,在软件开发中特别适用于简化Java对象(如POJO)的开发流程。它借助注解实现了其核心功能,在开发环境中配置Lombok组件能够有效减少不必要的代码编写工作。通过使用该工具开发者不仅能够消除冗长的代码量还能够节省创建构造器getter和setter等方法所需的时间

二、IntelliJ IDEA安装Lombok插件

1.打开settings面板
2.安装lombok插件


安装好后,需重启才能生效

3.pom.xml中引入lombok依赖
复制代码
    <dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.0</version>
    <scope>provided</scope>
    </dependency>
4.lombok使用

这里以@Data注解为例,介绍lombok的使用

复制代码
    import lombok.Data;
    
    // 给类加上@Data注解
    @Data
    public class User {
    private long id;
    private String name;
    private int age;
    }

编译后代码如下

复制代码
    public class User {
    private long id;
    private String name;
    private int age;
    
    public User() {
    }
    
    public long getId() {
        return this.id;
    }
    
    public String getName() {
        return this.name;
    }
    
    public int getAge() {
        return this.age;
    }
    
    public void setId(final long id) {
        this.id = id;
    }
    
    public void setName(final String name) {
        this.name = name;
    }
    
    public void setAge(final int age) {
        this.age = age;
    }
    
    public boolean equals(final Object o) {
        if (o == this) {
            return true;
        } else if (!(o instanceof User)) {
            return false;
        } else {
            User other = (User)o;
            if (!other.canEqual(this)) {
                return false;
            } else if (this.getId() != other.getId()) {
                return false;
            } else {
                Object this$name = this.getName();
                Object other$name = other.getName();
                if (this$name == null) {
                    if (other$name == null) {
                        return this.getAge() == other.getAge();
                    }
                } else if (this$name.equals(other$name)) {
                    return this.getAge() == other.getAge();
                }
    
                return false;
            }
        }
    }
    
    protected boolean canEqual(final Object other) {
        return other instanceof User;
    }
    
    public int hashCode() {
        int PRIME = true;
        int result = 1;
        long $id = this.getId();
        int result = result * 59 + (int)($id >>> 32 ^ $id);
        Object $name = this.getName();
        result = result * 59 + ($name == null ? 43 : $name.hashCode());
        result = result * 59 + this.getAge();
        return result;
    }
    
    public String toString() {
        return "User(id=" + this.getId() + ", name=" + this.getName() + ", age=" + this.getAge() + ")";
    }
    }

三、Lombok不生效常见解决方法

1.检查是否安装Lombok插件,若未安装,按步骤二安装
2.检查Lombok版本号

目前Lombok最新版本是1.18.x,如果使用1.16的可能会无法生效

3.开启注解处理

打开settings面板

四、Lombok注解

  • 该字段表示数据属性。
    • 表示数据赋值的方法。
    • 表示数据读取的方法。
    • 隐式抛出异常的方法。
    • 同步访问控制的标志。
    • 转换为字符串表示的方法。
    • 日志记录的标志。
    • 等效性哈希码的标志。
    • 数据值的标志。
    • 标识有无null性的标志。
@Data

注解位于类中,并为该类的所有属性提供了getter和setter方法。此外,该类还实现了equals、canEqual、hashCode和toString等方法。这些功能等价于同时使用@ToString、@EqualsIgnoreCase(假设正确)、@Getter和@Setter注解。

@Setter
  • 在属性上进行全局标注,并为此单个属性提供相应的设置方法
  • 在类层面的整体标注下,默认实现所有属性的一致设置
@Getter
  • 对于单个属性的访问, 使用get方法
    • 对于整个类体的所有属性, 使用get方法
@AllArgsConstructor

在类中为类增加一个参数化的构造方法,并添加了此注释后将不再支持自动生成默认构造方法。

@NoArgsConstructor
  • 注解在类上, 为类提供一个无参的构造方法
@RequiredArgsConstructor

注解应用于类中,并创建带参数的构造函数;这些参数包括两类成员变量:一类是带有@NonNull注解的所有成员变量;另一类是带有final修饰的所有成员变量。

@EqualsAndHashCode
  • 注解在类上, 生成equals、canEqual、hashCode方法
@NonNull

注解作用于属性上时,默认会自动生成针对该参数的非空校验;若该参数为空,则会导致抛出空指针异常。

@Cleanup

注解放置在变量前以确保该资源会在默认情况下被彻底释放。通常会调用close()方法来释放资源;若该资源另有关闭机制,则可使用@Cleanup(“methodName”)指明关闭程序。

@ToString
  • 注解在类上,生成所有参数的toString方法
@Value

为类添加final关键字以指定字段为最终类型,并生成带有完整参数列表的构造函数、getter方法以及对应的访问器接口如equals、hashCode和toString等标准方法

@SneakyThrows

在方法体内对代码进行注解时,则可以通过try-catch块来处理可能出现的情况,并在catch块中使用Lombok.sneakyThrow(e)将捕捉到的异常抛出。同时也可以配合@SneakyThrows annotation来指定需要被抛出的具体异常类型。

@Synchronized
  • 类级注释与其所关联的@Synchronized注释效果一致,在功能上均用于对锁操作的实现。值得注意的是,在@Synchronized中通过关键字可指定被锁的对象为该类的对象(即class层面),而@Synchronized则明确指定被锁的对象为私有且静态的final类型(即单例层面)。
    • 实例方法级注释与其所关联的@Synchronized注释效果一致,在功能上均用于对锁操作的实现。值得注意的是,在此情况下通过synchronized关键字可指定被锁的对象仅限于当前实例的方法调用时所在的this指针所指向的对象(即当前线程下的单个实例层面),而若需对全局单例进行锁管理则应采用带有显式指定参数的@Synchronized形式。
@Log

基于不同类型的注解创建不同类型的log实例,并确保所有实例的名称均为log;此外,在系统中共有9种可选的实现方式。

  • @CommonsLog
  • @Flogger
  • @JBossLog
  • @Log
  • @Log4j
  • @Log4j2
  • @Slf4j
  • @XSlf4j
  • @CustomLog

全部评论 (0)

还没有任何评论哟~