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

and*_*sdr 4 java overloading code-duplication

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

(我已经阅读了如何减少构造函数重载代码的帖子,最佳答案建议使用关键字"this".在我的情况下,我想我需要使用"this"从第二个调用第一个构造函数输入存储之后的一个.但是这会导致编译错误:"调用this必须是构造函数中的第一个语句".)

示例代码:

public class A {
  public A(String a) {
    //process a
  }
  public A() {
    String a = "defaultString";
    //process a
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我在类构造函数中使用输入对话框调用需要大量的工作(我知道这不是很好的做法).所以我已经改变了代码示例,以引导讨论远离这个:).

ass*_*ias 10

一种方法是使用init方法:

public class A {
  public A(String a) {
    init(a);
  }
  public A() {
    String a = "defaultString";
    init(a);
  }
  private void init(String a) {
    //process a
  }
}
Run Code Online (Sandbox Code Playgroud)

PS:我同意Mike Clark的评论 - 提示用户输入值的行不能移到构造函数之外.


Chr*_*heD 5

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

不要那样做。从长远来看,这将使代码变得非常复杂且难以维护。至少尝试将 UI 问题(输入对话框等)与您的object模型(您可以string在构造函数中提供)分开。

老实说,你真的不希望这里有一个重载的构造函数。