如何处理2个几乎相同的构造函数

Zip*_*ppy 16 java constructor overloading duplicates

如果我的自定义类中有2个构造函数,并且其中一个构造函数需要一个额外的参数并完成第一个构造函数,但只需要一行代码(并且这个额外的行使用额外的参数),如何在没有它的情况下处理这个问题.必须复制第一个构造函数中的所有代码?

示例代码

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)


}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 19

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

public MyClass(int number1, int number2, int number3) {
    this(number1, number2);
Run Code Online (Sandbox Code Playgroud)


bas*_*bas 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)


}
Run Code Online (Sandbox Code Playgroud)

  • 我只是说,因为我认为你的解决方案将取决于构造函数的作用,Slaks的回答似乎涵盖了所有可能性.不是你的错误,而是取决于构造函数的作用. (2认同)
  • @Math你是对的,但通常最好用构造函数中带有更少参数的参数来调用构造函数,因为通常缺少的参数需要或暗示默认值. (2认同)

roc*_*boy 7

如果参数太多而无法管理,您还可以使用构建器模式:

MyClass obj = Myclass.set1(number1).setN2(number2).setN3(number3).build();
Run Code Online (Sandbox Code Playgroud)

build() 可以称之为繁琐的构造函数.