Hibernate Search:静态块调用Version#touch()的目的是什么

时间:2019-07-10 13:01:11

标签: java hibernate hibernate-search

我正在寻找Hibernate Search的源代码,偶然发现了一段我不太了解的代码。

有一个静态块调用org.hibernate.search.engine.Version类的静态方法。我怀疑它可能与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

的链接

1 个答案:

答案 0 :(得分:2)

如果<span class="b1">FOO</span> <span class="b2">FOO</span>类已经加载,则private Vector3 newmousepos; void Start() { m_Plane = new Plane(Vector3.up, transform.position); } void Update() { if (Input.GetMouseButton(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); float enter = 0.0f; if (m_Plane.Raycast(ray, out enter)) { //Get the point that is clicked Vector3 hitPoint = ray.GetPoint(enter); transform.position = Vector3.Lerp(transform.position,hitPoint,Time.deltaTime*5f); } } 不会执行任何操作。

如果未加载Version类,则Version.touch();将触发加载,而该加载又将触发Version类中以下静态代码块的执行:

Version.touch();

...,它将记录Hibernate Search版本。

因此仅在确保对Version的调用之前确保Hibernate Search版本已记录。