lombok.Builder @Builder 编译Error:(xx,xx)java: 找不到符号cannot find symbol class Builder

目录

1.前言(废话)

2.测试代码

2.1 基本类

2.2 在OuterClass添加静态方法:入参是User,返回值是OuterClass.java(编译正确)

2.3 修改OuterClass添加静态方法,加入了一些常见的业务逻辑判断(编译报错 java:找不到符号)


1.前言(废话)

        在日常的软件开发工作中,建造者模式(或创建者模式)是很实用的一种设计模式,用于很方便地创建一个对象,减少写get、set、无参构造器等方法的时间,特别是在类的成员比较多的情况,大大减少了代码的篇幅(一大堆的get、set方法有多长)。

       通过 lombok包里面的@Builder注解,我们可以很简单的实现一个类的get、set等方法。但可惜在实际使用时,如果类的内部还有一个静态内部类时,编译时可能会出现Error:(xx,xx)java: 找不到符号问题(这和代码里面外部类和内部类使用顺序有关),点击提示栏错误地方,idea会自动将光标移到@Builder注解上。

2.测试代码

2.1 基本类

User.java

import lombok.Data;

@Data
public class User {
    private String name;
}

OuterClass.java和InnerClass.java

import lombok.Builder;
import lombok.Getter;


@Builder
@Getter
public class OuterClass {

    // 静态内部类是外部类的一个成员变量
    private InnerClass innerClass;

    @Builder
    @Getter
    public static class InnerClass {
        private User user;
    }
}

2.2 在OuterClass添加静态方法:入参是User,返回值是OuterClass.java(编译正确)

import com.test.OuterClass.InnerClass.InnerClassBuilder;

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class OuterClass {

    private InnerClass innerClass;

    public static OuterClass toOuterClass(User user) {
        return OuterClass.builder()
                .innerClass(InnerClass.builder()
                        .user(user)
                        .build())
                .build();
    }

    @Builder
    @Getter
    public static class InnerClass {
        private User user;
    }
}

2.3 修改OuterClass添加静态方法,加入了一些常见的业务逻辑判断(编译报错 java:找不到符号)

        添加判断User是否为空(null)的判断,如果不为空,我们才把user对象构建到InnerClass对象中。

import lombok.Builder;
import lombok.Getter;

@Builder
@Getter
public class OuterClass {

    private InnerClass innerClass;


    public static OuterClass toOuterClass(User user) {

        InnerClassBuilder builder = InnerClass.builder();
        if (user != null) {
            // 判断user是否为空
            builder.user(user);
        }
        return OuterClass.builder()
                .innerClass(builder.build())
                .build();
    }

    @Builder
    @Getter
    public static class InnerClass {
        private User user;
    }
}

      在网上找到了个类似的问题,lombok.Data @Data注解,解释是静态类的解析,在注解解析器生成builder之前,导致找不到符号cannot find symbol class xxx。

cannot find symbol class Data if import inner inner class · Issue #1684 · projectlombok/lombok · GitHub

自己的解决方案是:自己实现builder的创建者模式的代码,最简单的就是第一个编译成功的代码,找到自动生成的xxx.class文件,直接把里面的相关代码复制一份,然后粘贴到源码中,去除类上面的@Builder注解。

### Java Lombok @Data 注解编译错误解决方案 当遇到 `@Data` 或其他 Lombok 注解导致的不到符号 (cannot find symbol)编译错误时,通常是因为 IDE 或构建工具未能正确识别和处理这些注解。以下是详细的排查和解决方法: #### 1. 安装并配置 Lombok 插件 确保已安装适用于开发环境的 Lombok 插件。对于 IntelliJ IDEA 用户来说,即使官方宣称自带集成,也建议手动确认插件状态。 - 进入菜单栏中的 **File -> Settings** - 寻 **Plugins** 部分,并搜索 "Lombok" - 如果未安装,则点击 **Install**, 并按照提示完成操作[^5] #### 2. 启用注解处理器 某些情况下,默认设置可能禁用了必要的注解处理器功能,这会阻止 Lombok 正常工作。 - 对于 Maven 和 Gradle 构建项目,需确保 pom.xml 文件或 build.gradle 中包含了正确的依赖项以及启用了 APT(Annotation Processing Tool) ```xml <!-- For Maven --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${最新版本号}</version> <scope>provided</scope> </dependency> <build> <plugins> <!-- Enable annotation processing --> ... </plugins> </build> ``` ```groovy // For Gradle dependencies { compileOnly 'org.projectlombok:lombok:${最新版本号}' annotationProcessor 'org.projectlombok:lombok' } ``` - 在 Eclipse/IntelliJ IDEA 设置里开启 Annotation Processors 功能 - **Eclipse**: Window → Preferences → Java → Compiler → Building → Enable project specific settings...勾选上"Enable annotation processing" - **IDEA**: File → Settings → Build, Execution, Deployment → Compiler → Annotation Processors 勾选 "Enable annotation processing"[^3] #### 3. 清理缓存与重新导入模块 有时旧版文件残留可能导致冲突,清理相关缓存有助于解决问题。 - 使用命令行执行如下指令来清除本地仓库缓存: ```bash mvn clean install -U # 更新所有快照版本依赖 rm -rf ~/.m2/repository/* # 删除Maven全局库下的所有内容(谨慎操作!) ``` - 或者通过 IDE 提供的功能来进行清理重置动作,比如在 IDEA 上可以选择 Invalidate Caches / Restart 来刷新整个工程结构. #### 4. 检查 Lombok 版本兼容性 不同 JDK 及框架组合下可能存在不匹配情况,因此要保证所使用的 Lombok 是最新的稳定发行版之一;同时也要注意与其他第三方库之间的潜在冲突关系[^1]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值