Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java初始化方法_Java_Initialization - Fatal编程技术网

Java初始化方法

Java初始化方法,java,initialization,Java,Initialization,确保在java中调用init方法的好方法是什么?我看到的替代方案是 不要测试它,让方法自己失败,可能是由于NullPointerException 测试方法是否已初始化或抛出 玛瑙 始终初始化,否则将初始化设为noop 静默初始化 大多数方法都非常冗长,降低了总体可读性 调用init()

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

  • 不要测试它,让方法自己失败,可能是由于
    NullPointerException
  • 测试方法是否已初始化或抛出
  • 玛瑙
  • 始终初始化,否则将初始化设为noop
  • 静默初始化

大多数方法都非常冗长,降低了总体可读性

调用
init()init()

大多数情况下,您都希望根据应用程序正在执行的容器选择帮助您快速失败的机制。例如,如果是web容器,则可能需要在创建过程中对其进行初始化。此外,我不知道下面的内容为何冗长。其意图简单、清晰、明确

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

如果初始化是使用合同的一部分,则抛出非法状态异常,因为类的客户端未使其转换到正确的“初始化”状态


创建时是否初始化取决于如何使用它。例如,如果可能是Spring应用程序上下文使用了它,那么您需要推迟初始化。

init()的实际功能是什么?它需要为类的每个实例调用还是为每个应用程序调用一次?你不能把相关的代码放到类的构造函数中吗?好问题,我设想一种
initonce
类型的行为,你可以使用静态初始化器块对类执行一次性初始化。
public void foo() {
     if (!inited) {
         throw new IllegalArgumentException("not initalized");
     }
     fooInternal();
}

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