我正在从clojure生成一个实现JDBC驱动程序的java类,问题是通常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声明中添加什么以及实现它的函数应该具有哪个名称?
感谢。
答案 0 :(得分:3)
我认为目前纯gen-class
这是不可能的。 clojure的gen-class总是生成一个静态初始化器,它通过调用
clojure.lang.Var#internPrivate(String, String)
生成静态初始化程序有一定的灵活性(请参阅:load-impl-ns
的{{1}}选项),但是没有办法将自己的自定义代码添加到初始化程序中,我可以在查看genclass.clj后看到。
顺便说一下 - 在JVM中,静态初始化程序'方法'的名称是gen-class