java - 将默认公共(public)构造函数添加到生成的构建器内部类

标签 java spring lombok

我正在使用 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.

Read also this.

关于java - 将默认公共(public)构造函数添加到生成的构建器内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50326530/

相关文章:

java - 有没有办法从单个类创建多个 @Client bean

java - Reactor REST Mono 返回 ScanAvailable : true

java - 在 Spring Boot 中找不到符号(所有构造函数、getter 和 setter)

java - Setter 注释在 Java 类中不起作用

spring - Tomcat 7、Raspberry Pi Spring-boot、Java 1.8、maven 应用程序、java.lang.UnsupportedClassVersionError、jhipster 项目

java - 如何指定 Jackson 反序列化的默认值

java - 我该如何拆分?

Java - Spring数据访问对象实现

java - 安装证书后收到 sun.security.provider.certpath.SunCertPathBuilderException (Scala)

java - 在tomcat中运行.jar