如何使用gen-class定义静态初始化程序

4

我正在从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声明中填写什么?实现该声明的函数应该命名为什么?

谢谢。

1个回答

4
我不认为纯的gen-class能够实现这一点。Clojure的gen-class始终会生成一个静态初始化器,在其中通过调用将生成的类与Clojure运行时绑定。
clojure.lang.Var#internPrivate(String, String)

在生成静态初始化程序时有一定的灵活性(参见gen-class选项中的:load-impl-ns),但在审查genclass.clj后,我没有看到添加自定义代码到初始化程序的方法。

顺便说一下,在JVM中,静态初始化程序“方法”的名称是<clinit>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接