Как определить статический инициализатор с помощью 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>