在具有静态初始化程序可接受/惯用的类中使用空静态方法?

use*_*232 5 java static idioms initialization

我遇到了以下情况:

class Foo {

  static {
    // setup for logging and configuration
  }

  public static void setup() {
    // do nothing
  }

}
Run Code Online (Sandbox Code Playgroud)

这是惯用的Java代码吗?是否应该避免这种具体原因?

这是在测试套件中找到的.

我最初担心的是理论上可以在不调用#setup()的情况下进行初始化.

jac*_*646 0

这是惯用的 Java 代码吗?

不。

有什么具体原因应该避免这种情况吗?

是的:这很令人困惑,正如对该问题的评论所证明的那样。

我最初担心的是理论上可以在不调用 #setup() 的情况下进行初始化。

我猜想作者担心的是如果不调用 则初始化可能不会setup()发生。该setup()方法保证静态初始化程序已执行其“日志记录和配置设置”。据推测,此配置存在副作用,作者试图通过调用空方法来确保这一点。