首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免重载构造函数中的代码重复?

如何避免重载构造函数中的代码重复?
EN

Stack Overflow用户
提问于 2012-05-08 05:48:14
回答 6查看 3.3K关注 0票数 5

假设我有一个接受输入的构造函数和另一个使用默认值的构造函数。然后,两个构造函数以完全相同的方式继续处理此数据。(示例如下。)在这种情况下,我有什么选择来避免代码重复?

(我读过这篇文章,上面的答案建议使用关键字“how to reduce the code of constructor overloading”。在我的例子中,我想在存储输入之后,我需要使用"this“从第二个构造函数中调用第一个构造函数。然而,这会导致编译错误:“调用This必须是构造函数中的第一条语句”。)

示例代码:

代码语言:javascript
运行
复制
public class A {
  public A(String a) {
    //process a
  }
  public A() {
    String a = "defaultString";
    //process a
  }
}

编辑:我因为在类构造函数中使用输入对话框调用而备受指责(我知道这并不是一个好的做法)。因此,我更改了代码示例,以将讨论从以下内容转移:)。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-05-08 05:50:34

一种方法是使用init方法:

代码语言:javascript
运行
复制
public class A {
    public A(String a) {
        init(a);
    }
    public A() {
        String a = "defaultString";
        init(a);
    }
    private void init(String a) {
        //process a
    }
}
票数 10
EN

Stack Overflow用户

发布于 2012-05-08 05:54:25

假设我有一个构造函数接受输入,另一个构造函数通过输入对话框请求输入。

别干那事。从长远来看,这将造成可怕的纠缠和难以维护的代码。至少尝试将UI关注点(输入、对话框等)从object模型(可以在构造函数中提供string )中分离出来。

在我看来,你真的不想在这里使用一个重载的构造函数()。

票数 5
EN

Stack Overflow用户

发布于 2012-05-08 23:36:50

您可能希望尝试链接您的构造函数:

代码语言:javascript
运行
复制
public class A {
  public A(String a) {
    //process a
  }
  public A() {
    this("defaultString");
  }
}

如果您想使用对话框来获取字符串,我建议您在调用此构造函数之前显示该对话框。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10489626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档