【问题标题】:How to return from a static initialization block in java如何从java中的静态初始化块返回
【发布时间】:2012-06-20 11:07:25
【问题描述】:

我想从静态块返回。

看起来 return 和 break 语句不起作用。有没有其他选择。

我知道不好的解决方法可能是创建一个标志并检查该标志是否继续。

我了解初始化块并非用于进行计算,而只是用于类加载期间的基本初始化。

【问题讨论】:

  • 请提供您的源代码
  • 我无法理解这个问题。请解释清楚或提供您的代码以便于理解。
  • @Kalai 我想他的意思是 return 不能在初始化块中使用。 JLS 14.17:“[...] 如果 return 语句包含在实例初始化程序或静态初始化程序中,则会出现编译时错误 [...]”

标签: java static initialization


【解决方案1】:

将代码委托给私有静态方法:

static {
    initialize();
}

private static void initialize() {
    foo();
    if (someCondition) {
        return;
    }
    bar();
}

【讨论】:

  • 更简洁的方式来编写初始化块。
  • 不能以这种方式分配static final 字段
【解决方案2】:

不要使用return,只需将条件代码包装在if 中即可。

【讨论】:

    【解决方案3】:

    静态初始化器没有复杂的业务,所以这可能是个坏主意(即使您不购买 SESE)。

    实现返回的最简单方法是使用带标签的中断。

    static {
        init: {
            ...
               break init;
        }
    }
    

    它们非常罕见,通常出现在嵌套的 for 循环中。这种新颖性可能会让读者知道正在发生一些不太可靠的事情。

    【讨论】:

      【解决方案4】:

      您不能从静态初始化程序块返回。无处可归。但这不应该是必要的。您应该能够将代码重组为“单入口,单出口”。

      【讨论】:

      • 我必须同意这个说法,它也会提供更简洁(更容易阅读)的代码。
      【解决方案5】:

      你不能从静态块返回,但最好使用其他一些函数来执行你的逻辑并返回到块。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-06
        • 2012-09-15
        • 1970-01-01
        • 2011-01-26
        • 2012-04-16
        • 2023-03-26
        • 1970-01-01
        相关资源
        最近更新 更多