确保在java中调用init方法有什么好方法?我看到的替代方案是
NullPointerException
public void foo() {
if (!inited) {
throw new IllegalArgumentException("not initalized");
}
...
}
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();
}
...
}
这些方法中的大部分都非常冗长,降低了整体可读性。
答案 0 :(得分:5)
如果初始化是使用合同抛出IllegalStateException
的一部分,因为类的客户端没有使它转换到正确的“初始化”状态...
是否在创建时初始化取决于它的使用方式。例如,如果Spring ApplicationContext可能会使用它,那么您将需要推迟初始化。
答案 1 :(得分:2)
在初始化程序块中调用init();
,这样每个构造函数调用也将执行init();
。
答案 2 :(得分:2)
大多数时候你想要fail fast所以选择可以帮助你快速失败的机制,根据你的应用程序正在执行的容器。例如,如果一个web容器,那么你可能在创建{期间“初始化它{3}}。而且,我不确定为什么以下是冗长的。它的意图简单,清晰,明确。
public void foo() {
if (!inited) {
init();
}
...
}