【问题标题】:How to remove repeated code in constructors? [duplicate]如何删除构造函数中的重复代码? [复制]
【发布时间】:2018-12-17 22:30:58
【问题描述】:

我有以下代码;

abstract class Animal{

    public String name;
    public int legCount;

    //If has no leg count
    public Animal(String name){
        this.name = name;
        this.legCount = 4;  //Default leg count is 4

        System.out.println("Created animal: " + name);
    }

    //If has a leg count
    public Animal(String name, int legCount){
        this.name = name;
        this.legCount = legCount;

        System.out.println("Created animal: " + name);
    }}

我重复了 System.out.println("Created animal: " + name); 两次。有没有办法删除这个重复的代码,所以它只运行一次?拥有多个构造函数会让这有点痛苦。

【问题讨论】:

  • 1 个构造函数可以调用另一个。每个重载的构造函数都应该设置一个特定的值,然后调用链中的下一个构造函数,直到到达设置所有变量的主构造函数。

标签: java object constructor


【解决方案1】:
class Animal{

    public String name;
    public int legCount;


    public Animal(String name){
        this(name,4);
    }

    public Animal(String name, int legCount){
        this.name = name;
        this.legCount = legCount;
        System.out.println("Created animal: " + name);
    }


}

现在您只需重复打印行一次

1参数构造函数调用2参数构造函数,默认值为4。

【讨论】:

    【解决方案2】:

    在您的构造函数中,只需要一个名称,通过调用将其委托给另一个构造函数:

    public Animal(String name){
        this(name, 4);
    }
    

    这将委托给另一个构造函数,因此不会重复任何代码。这不仅只有一行代码调用System.out.println,也只有一行代码分配给name,也只有一行代码分配给legCount

    【讨论】:

      【解决方案3】:

      问题已经回答了:

      只需将您的所有构造函数链接到一个最终会执行您的命令的构造函数。然而,值得注意的一件事是确保没有一个构造函数具有相同的signature .这个非常重要!如果一个构造函数接受两个字符串参数,则不应有其他构造函数接受两个字符串。 Java 禁止使用相同参数的多个构造函数。

      我希望这会有所帮助.. 编码愉快!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-19
        • 2015-12-08
        • 2017-01-10
        • 1970-01-01
        • 1970-01-01
        • 2019-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多