我正在研究 Hibernate Search 的源代码,并偶然发现了一段我不太理解的代码。
有一个静态 block 调用 org.hibernate.search.engine.Version
的静态方法类(class)。我怀疑它可能与 JIT 有关,但不确定如何。
能解释一下吗?
public class ImmutableSearchFactory implements ExtendedSearchIntegratorWithShareableState, WorkerBuildContext {
static {
Version.touch();
}
版本类别:
public final class Version {
private Version() {
//now allowed
}
public static String getVersionString() {
return Version.class.getPackage().getImplementationVersion();
}
static {
LoggerFactory.make( MethodHandles.lookup() ).version( getVersionString() );
}
public static void touch() {
}
}
这里是GihHub的链接
最佳答案
如果 Version
类已经加载,Version.touch();
将不会执行任何操作。
如果Version
类未加载,Version.touch();
将触发加载,进而触发以下静态代码块的执行在 Version
类中:
static {
LoggerFactory.make( MethodHandles.lookup() ).version( getVersionString() );
}
...这将记录 Hibernate Search 版本。
因此,对 Version.touch();
的调用只是为了确保在 Hibernate Search 启动之前记录 Hibernate Search 版本。
关于java - hibernate 搜索 : what is the purpose of static block calling Version#touch(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971299/