You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Lombok的Builder设为公开?跨包访问Builder问题咨询

解决Lombok @Builder外部包无法访问的问题

这问题我之前也踩过坑!默认情况下Lombok生成的@Builder内部Builder类是包私有的,所以外部包没法直接访问它的构造器。解决方法很简单,只要给@Builder注解加上access参数,把Builder的访问级别设为PUBLIC就行。

步骤1:修改你的类,指定Builder的访问级别

在@Builder注解里传入access = AccessLevel.PUBLIC,这样Lombok会生成public的Builder类和对应的构造器:

package com.foo;

import lombok.Builder;
import lombok.AccessLevel;

@Builder(access = AccessLevel.PUBLIC)
public class MyClass {
    // 你的类成员变量
    private String username;
    private int userId;
}

步骤2:外部包中使用Builder

修改之后,外部包就可以正常用两种方式创建实例了:

  1. 推荐方式:用Lombok生成的静态builder()方法(更符合Builder模式的使用习惯)
package com.bar;

import com.foo.MyClass;

public class ExternalClass {
    public static void main(String[] args) {
        MyClass myInstance = MyClass.builder()
                                    .username("john_doe")
                                    .userId(123)
                                    .build();
    }
}
  1. 直接实例化Builder类(可行但不如静态方法直观)
package com.bar;

import com.foo.MyClass;

public class ExternalClass {
    public static void main(String[] args) {
        MyClass myInstance = new MyClass.MyClassBuilder()
                                    .username("jane_smith")
                                    .userId(456)
                                    .build();
    }
}

为什么默认不行?

Lombok的@Builder默认用AccessLevel.PACKAGE作为Builder类的访问级别,这意味着只有同一个包下的类才能访问Builder的构造器。通过显式设置access = AccessLevel.PUBLIC,我们把Builder的可见性提升到全局,外部包自然就能访问了。

内容的提问来源于stack exchange,提问作者H.abidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:38:27