有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在使用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()。但是为了更好地与SpringBeans创建集成,我尝试创建一个FactoryBean。但由于生成器类上缺少默认构造函数而导致编译错误,未找到任何相关文档。龙目山有可能吗?我的意思是在生成器上而不是在原始类上创建默认构造函数。换句话说,我需要两个选项来创建生成器实例: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;
    }
}

共 (1) 个答案

  1. # 1 楼答案

    使用注释^{}

    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.