Hibernate Search: какова цель вызова статического блока Version # touch () - PullRequest
1 голос
/ 10 июля 2019

Я изучаю исходный код 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 Ответ

2 голосов
/ 10 июля 2019

Если класс Version уже был загружен, Version.touch(); ничего не сделает.

Если класс Version не был загружен, Version.touch(); запустит загрузку, что, в свою очередь, приведет кинициировать выполнение следующего блока статического кода в классе Version:

    static {
        LoggerFactory.make( MethodHandles.lookup() ).version( getVersionString() );
    }

..., который будет регистрировать версию поиска Hibernate.

Итак, вызов Version.touch();только для того, чтобы убедиться, что версия Hibernate Search зарегистрирована перед загрузкой Hibernate Search.

...