2017-10-28 94 views
1
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)构造函数,但它给我编译错误。如何编写2个构造函数来初始化2个不同的私有最终变量?

InitialisingFields(String a,String b)它说:“最后的空白领域c可没有被初始化” & 为InitialisingFields(String a,String b,String c)它说:“最后的空白领域c可已经被初始化”

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

+0

你想要什么'C'是如果不提供? –

+2

所有_final_变量必须在_each构造函数_的末尾初始化。 –

+1

我希望c只在我调用构造函数时才被初始化。所以这样我就不会打破现有的类。 –

回答

3

你应该全面走另一条路 - 有一个构造函数初始化所有的领域,并有其他(一个或多个)以默认值叫它:

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; 
} 
+0

问题是,如果我修改了现有的构造函数,那么我必须修复很多类,这个构造函数已经被使用,并且数量巨大。 –

+0

@AmardeepSingh我建议的修正更改了给定构造函数的**实现**,而不是它的**签名**。您将**不**必须修改任何使用它的代码。 – Mureinik

+0

太好了,非常感谢。 –

相关问题