java - 如何编写 2 个构造函数来初始化 2 个不同的私有(private)最终变量?

标签 java constructor compiler-errors initialization final

public class InitialisingFields {
    private final String a;
    private final String b;
    private final String c;

    InitialisingFields(String a,String b){
        this.a = a;
        this.b = b;
    }

    InitialisingFields(String a,String b,String c){
        this(a , b);
        this.c = c;
    }
    public static void main(String[] args) {
        InitialisingFields i = new InitialisingFields("A","B","C"); 
    }
}

我想编写 InitialisingFields(String a,String b,String c) 构造函数,但它给我编译错误。

对于 InitialisingFields(String a,String b) 它说“空白的最终字段 c 可能尚未初始化” & 对于 InitialisingFields(String a,String b,String c) 它说“空白的最终字段 c 可能已经被初始化”

我不想修改 InitialisingFields(String a,String b) 并添加一个参数,因为它已被很多类使用,我将不得不重构大量类。对于我的用例,我想使用带有附加参数的此类对象。

最佳答案

你应该反其道而行之——让一个构造函数初始化所有字段并让其他构造函数使用默认值调用它:

InitialisingFields(String a, String b) {
    this(a, b, null);
}

InitialisingFields(String a, String b, String c) {
    this.a = a;
    this.b = b;
    this.c = c;
}

关于java - 如何编写 2 个构造函数来初始化 2 个不同的私有(private)最终变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46994264/

相关文章:

angularjs - 在 AngularJS Factory 中使用 Getter/Setter 方法

c++ - 如何在 C++ 类的初始化列表中初始化成员结构?

C++ MFC 构建错误但组件不是 MFC

c++ - C++使用代码生成错误

delphi - 不满意的转发或外部声明

java - swagger中spring fox health路由显示多个HTTP方法

java - Intellij 使用混合项目 (maven+gradle)

c++ - 模板化优先级队列继承自模板化堆

java - 签名算法 : SHA256WithRSAEncryption 上的算法约束检查失败

Java 6 : how to pass multiple parameters to APT