是否有可能将Lombok的建造者公之于众?

H.a*_*idi 4 java lombok

我在我的项目中使用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)

  • 我试图直接使用新的构建器.感谢您的回答. (3认同)

小智 11

问题是您以错误的方式使用@Builder。

Builder Pattern使用时,你只需要使用静态方法来调用它,然后建立,例如:

MyClass instance = MyClass.builder().build(); .

请不要newMyClassBuilder再次,它打破了格局从此您直接使用内封装MyClassBuilder类。这个构造函数被隐藏在外面,这就是为什么你会得到不可访问的错误。相反,它为您提供静态方法builder()