我想从静态块中返回。
看起来return和break语句无效。有没有其他替代方案。
我知道一个不好的解决方法是创建一个标志(flag),并检查标志来确定是否继续执行。
我明白初始化块并不适合进行计算,只适合在类加载期间进行基本的初始设置。
我想从静态块中返回。
看起来return和break语句无效。有没有其他替代方案。
我知道一个不好的解决方法是创建一个标志(flag),并检查标志来确定是否继续执行。
我明白初始化块并不适合进行计算,只适合在类加载期间进行基本的初始设置。
将代码委托给一个私有的静态方法:
static {
initialize();
}
private static void initialize() {
foo();
if (someCondition) {
return;
}
bar();
}
private static final Singleton INSTANCE = initialize();
或者 static { INSTANCE = initialize(); }
。 - Gili不要使用return
,而是将条件代码包装在if
中。
静态初始化程序没有必要变得复杂,所以即使您不同意单入口单出口原则,这也可能是个坏主意。
实现返回的最简单方法是使用带标签的break语句。
static {
init: {
...
break init;
}
}
它们非常罕见,通常出现在嵌套的for
循环中。这种新奇性可能会引起读者的警觉,认为一些可疑的事情正在发生。
你不能从静态初始化块中返回。没有任何可以返回的地方。但这并不是必要的。您应该能够重构您的代码,使其成为“单入口,单出口”。
你不能从静态块中返回,但最好使用其他函数来执行你的逻辑并返回到该块。
return
。JLS 14.17:“[...] 如果一个返回语句包含在实例初始化器或静态初始化器中,那么这是一个编译时错误 [...]”。 - user85421