我在我的项目中使用Lombok库,我无法使用@Builder外部包中注释的类.
有没有办法让建筑师公开?
MyClass instance = new MyClass.MyClassBuilder().build();
Run Code Online (Sandbox Code Playgroud)
错误是:
'myClassBuilder()'在'com.foo.MyClass.MyClassBuilder'中不公开.无法从外部包访问
Mic*_*ael 14
@Builder 已经产生了公共方法.您应该使用静态builder()方法而不是尝试自己实例化构建器:
Buildable foo = Buildable.builder()
.property("hello, world")
.build();
Run Code Online (Sandbox Code Playgroud)
为了向您展示生成的所有内容,我编写了以下类:
@Builder
public class Buildable
{
private final String property;
}
Run Code Online (Sandbox Code Playgroud)
然后我通过delombok运行它来查看生成的所有内容.如你所见,一切都是公开的:
public class Buildable
{
private final String property;
@java.beans.ConstructorProperties({"property"})
Buildable(final String property) {
this.property = property;
}
public static BuildableBuilder builder() {
return new BuildableBuilder();
}
public static class BuildableBuilder
{
private String property;
BuildableBuilder() { }
public BuildableBuilder property(final String property) {
this.property = property;
return this;
}
public Buildable build() {
return new Buildable(property);
}
public String toString() {
return "Buildable.BuildableBuilder(property=" + this.property + ")";
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 11
问题是您以错误的方式使用@Builder。
当Builder Pattern使用时,你只需要使用静态方法来调用它,然后建立,例如:
MyClass instance = MyClass.builder().build(); .
请不要new在MyClassBuilder再次,它打破了格局从此您直接使用内封装MyClassBuilder类。这个构造函数被隐藏在外面,这就是为什么你会得到不可访问的错误。相反,它为您提供静态方法builder()。