我在项目中使用Lombok库,我无法在外部包中使用带@Builder
注释的类。
有没有办法让建筑商公开?
MyClass instance = new MyClass.MyClassBuilder().build();
错误是:
'MyClassBuilder()'不公开 'com.foo.MyClass.MyClassBuilder'。无法访问 来自外包
答案 0 :(得分:11)
SyntaxError: invalid syntax
已经生成公共方法。您应该使用静态@Builder
方法,而不是尝试自己实例化构建器:
builder()
为了向您展示生成的所有内容,我编写了以下类:
Buildable foo = Buildable.builder()
.property("hello, world")
.build();
然后我通过delombok运行它以查看生成的所有内容。如你所见,一切都是公开的:
@Builder
public class Buildable
{
private final String property;
}
答案 1 :(得分:1)
此构建器注释的问题在于,如果您看到delombok,则生成的构建器构造函数没有访问指示符(公共,私有,受保护),因此仅在同一包中可见。 如果扩展类位于同一包中,则可以使用该功能。
我遇到了同样的问题,我认为lombok目前不支持此问题。 我可以在此处https://github.com/rzwitserloot/lombok/issues/1489
中找到功能请求我的建议是在此类中强制实施构建器模式。
答案 2 :(得分:0)
我发现了这种整洁的解决方法:
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class Customer {
private String id;
private String name;
public static MessageBuilder builder() {return new CustomerBuilder();}
}
答案 3 :(得分:0)
问题是您使用错误的方式使用@Builder。
使用Builder Pattern
时,只需使用静态方法来调用它,然后进行构建,例如:
MyClass instance = MyClass.builder().build();
。
请不要再次new
MyClassBuilder
,因为您直接使用内部MyClassBuilder
类,它会破坏模式的封装。该构造函数被隐藏在外部,这就是为什么您会收到不可访问的错误的原因。相反,它为您提供了静态方法builder()
。
答案 4 :(得分:0)
如上所述,您可以使用构建器,现在不是用户属性,builder()将返回实例创建,因此您可以将其视为普通构建器(无需使用属性)
instance = MyClass.MyClassBuilder().property1(value1).property1(value2).build();