Как определить статический инициализатор с помощью gen-класса

Я генерирую java-класс из clojure, который реализует драйвер JDBC, проблема в том, что драйверы jdbc обычно регистрируются в DriverManager в статическом инициализаторе следующим образом:

public class MyDriver implements java.sql.Driver {
    ...
    static { 
        ...
        try {
            DriverManager.registerDriver(new MyDriver());
        }
        catch (SQLException s) {
            throw (RuntimeException) new RuntimeException
                ("could not register MyDriver driver!").initCause(s);
        }
        ...
     }
}

Что я должен добавить в объявление gen-class и какое имя должна иметь функция, которая его реализует?

Благодарю.

1 ответ

Я не верю, что это возможно в чистом виде gen-class в настоящий момент. gen-класс clojure всегда генерирует статический инициализатор, где он связывает сгенерированный класс со средой выполнения clojure с помощью вызова

clojure.lang.Var#internPrivate(String, String)

Существует некоторая гибкость в создании этого статического инициализатора (см. :load-impl-ns возможность gen-class), но нет способа добавить свой собственный код в инициализатор, который я вижу после просмотра genclass.clj.

Кстати - в стороне, в JVM имя статического инициализатора 'method' <clinit>

Другие вопросы по тегам