如何将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
修改之后,外部包就可以正常用两种方式创建实例了:
- 推荐方式:用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(); } }
- 直接实例化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
相关产品推荐
相关产品推荐

