Java 成员初始化模式

标签 java oop

我有一个类 MyClass:

public class MyClass {
  private MyComplexType member1;
}

我必须对 member1 进行一些非常密集的初始化。足够了,它很容易保证有自己的方法,从 MyClass 构造函数调用。

我的问题是,以下哪种格式最适合此方法?

private MyComplexType initMyComplexType() { 
  MyComplexType result = new MyComplexType();  
  // extensive initialization on result...
  return result;
}

这样调用:

public MyClass() {
  member1 = initMember1();
}

private void initMember1() {
  member1 = new MyComplexType();
  // extensive initialization on member1...
}

这样调用:

public MyClass() {
  initMember1();
}

对于私有(private) 成员(member),哪种风格更好?为什么?

最佳答案

我会选择第一个选项,因为它更清楚地表达了 init 方法的目的并明确显示了数据流。

更不用说它使 init 方法中的代码有可能被重用。如果稍后需要初始化另一个变量,只需再次调用该方法即可,无需担心副作用。此外,如果另一个变量在另一个类中,您可以轻松地将方法移动到两个地方都可以访问的地方。

沿着这条线,我还会考虑将 init 方法保留为 doExtensiveComplexCalculation 之类的方法,以将其与您的实际成员变量分离。

关于Java 成员初始化模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186806/

相关文章:

java - XML当String时无法解析,当从File解析时没有问题

java - 使用java读取 "ParseFile"

java - 无法将抽象方法声明为私有(private)

c++ - 访问类中的几个容器

java - 面向对象编程中的等效返回代码

java - 单独线程中的加速度计传感器

java - 一种存储用户访问权限的方法

java - 使用 Applet 和 Apache POI 打开 Excel 文件

oop - 什么是 "upcast"?

php - 什么时候使用静态函数,什么时候不使用静态函数?