关于java:如何处理2个几乎相同的构造函数

How to deal with 2 almost identical constructors

本问题已经有最佳答案,请猛点这里访问。

如果我的自定义类中有两个构造函数,其中一个接受了一个额外的参数,并且做了第一个构造函数所做的一切,但只使用了一行额外的代码(而这一行使用了额外的参数),那么如何在不必复制第一个构造函数中的所有代码的情况下最好地处理这个问题?

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public myConstuctor(int number, int number2){

    int result = (number + number2);
    int result2 = (number2 - number1)

    //Etc
    //Etc
    //Etc
    //Etc

}

public myConstructor(int number1, int number2, int number 3){

    int result = (number + number2);
    int result2 = (number2 - number1)

    //Etc
    //Etc
    //Etc
    //Etc

    int result3 = (result + result2 + number3)


}


您可以调用另一个构造函数并将所有逻辑放在那里。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public myConstructor(int number, int number2){
    this(number, number2, 0);
}

public myConstructor(int number1, int number2, int number3){

    int result = (number + number2);
    int result2 = (number2 - number1)

    //Etc
    //Etc
    //Etc
    //Etc

    int result3 = (result + result2 + number3)


}


您可以使第二个构造函数调用第一个构造函数:

1
2
public MyClass(int number1, int number2, int number3) {
    this(number1, number2);


如果参数太多而无法管理,也可以使用生成器模式:

1
MyClass obj = Myclass.set1(number1).setN2(number2).setN3(number3).build();

build()可以调用繁琐的构造函数。


只需在第二个构造函数方法中使用第一个构造函数方法,然后……只需在第二个构造函数方法中添加所需的新行。

1
2
3
4
5
6
7
8
9
public ClassName(arg1, arg2){
   //etc
}


public ClassName(arg1,arg2,arg3){
 this(arg1,arg2);
 //new line of code to deal with arg3;
}

就这样):节省了很多时间。