确保在 java 中调用 init 方法的好方法是什么?我看到的替代方案是
- 不要测试它,让方法自己失败,可能是
NullPointerException
- 测试方法是否被初始化或抛出
public void foo() {
if (!inited) {
throw new IllegalArgumentException("not initalized");
}
...
}
- 委托(delegate)
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();
}
...
}
这些方法中的大多数都非常冗长并且降低了整体可读性。
最佳答案
如果初始化是使用契约(Contract)的一部分,则抛出 IllegalStateException
,因为类的客户端尚未使其转换到正确的“已初始化”状态……
是否在创建时初始化取决于它的使用方式。例如,如果它可能被 Spring ApplicationContext 使用,那么您将需要推迟初始化。
关于Java初始化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13193847/