Java init方法

时间:2012-11-02 10:55:53

标签: java initialization

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

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

private void fooInternal(){ ... };
  • 始终初始化,否则使init成为noop
public void foo() {
     init();
     ...
}
public void init() {
     if(!inited) {
         ...
     }
}
  • 默默地初始化
public void foo() {
     if (!inited) {
         init();
     }
     ...
}

这些方法中的大部分都非常冗长,降低了整体可读性。

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

在初始化程序块中调用init();,这样每个构造函数调用也将执行init();

答案 2 :(得分:2)

大多数时候你想要fail fast所以选择可以帮助你快速失败的机制,根据你的应用程序正在执行的容器。例如,如果一个web容器,那么你可能在创建{期间“初始化它{3}}。而且,我不确定为什么以下是冗长的。它的意图简单,清晰,明确。

public void foo() {
     if (!inited) {
         init();
     }
     ...
}