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声明中添加什么以及实现它的函数应该具有哪个名称?

谢谢。

4

1 回答 1

4

我不相信这gen-class在目前纯粹是可能的。clojure 的 gen-class 总是生成一个静态初始化器,它通过调用将生成的类与 clojure 运行时联系起来

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

该静态初始化程序的生成具有一定的灵活性(请参阅 的:load-impl-ns选项gen-class),但没有办法将您自己的自定义代码添加到初始化程序中,我在查看 genclass.clj 后可以看到。

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

于 2012-08-02T20:02:55.323 回答