Java init方法

Joh*_*erg 2 java initialization

有什么方法可以确保在java中调用init方法?我看到的替代方案是

  • 不要测试它,让方法本身失败,可能是a NullPointerException
  • 测试方法是否已初始化或抛出
public void foo() {
     if (!inited) {
         throw new IllegalArgumentException("not initalized");
     }
     ...
}
Run Code Online (Sandbox Code Playgroud)
  • Delagate
public void foo() {
     if (!inited) {
         throw new IllegalArgumentException("not initalized");
     }
     fooInternal();
}

private void fooInternal(){ ... };
Run Code Online (Sandbox Code Playgroud)
  • 总是初始化,否则使init成为noop
public void foo() {
     init();
     ...
}
public void init() {
     if(!inited) {
         ...
     }
}
Run Code Online (Sandbox Code Playgroud)
  • 默默地初始化
public void foo() {
     if (!inited) {
         init();
     }
     ...
}
Run Code Online (Sandbox Code Playgroud)

大多数这些方法都非常冗长,降低了整体可读性.

rob*_*ert 5

如果初始化是使用合同抛出的一部分,IllegalStateException因为类的客户端没有使它转换到正确的"初始化"状态......

是否在创建时初始化取决于它的使用方式.例如,如果Spring Application Application可能会使用它,那么您将需要推迟初始化.