我正在使用 Lombok 框架来生成样板代码,例如:
import lombok.*;
@Builder
@Value
public final class SocketConfig {
@Builder.Default
private int soTimeoutMilliseconds = 0;
@Builder.Default
private boolean soReuseAddress = false;
@Builder.Default
private int soLingerSeconds = -1;
private boolean soKeepAlive;
@Builder.Default
private boolean tcpNoDelay = false;
}
为了创建构建器实例,我曾经调用SocketConfig.builder()
。但为了更好地与 spring bean 创建集成,我尝试创建一个 FactoryBean
。但由于构建器类上缺少默认构造函数而出现编译错误,没有找到任何有关它的文档。 Lombok 可以吗?我的意思是在构建器上而不是在原始类上创建默认构造函数。换句话说,我需要两个选项来创建构建器实例:SocketConfig.builder()
或通过 new SocketConfig.SocketConfigBuilder()
。
import org.springframework.beans.factory.FactoryBean;
public class SocketConfigFactoryBean extends SocketConfig.SocketConfigBuilder implements FactoryBean<SocketConfig> {
@Override
public SocketConfig getObject() throws Exception {
return build();
}
@Override
public Class<?> getObjectType() {
return SocketConfig.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
最佳答案
使用注释NoArgsConstructor
:
Generates a no-args constructor. Will generate an error message if such a constructor cannot be written due to the existence of final fields.
关于java - 将默认公共(public)构造函数添加到生成的构建器内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50326530/