clojure - 如何使用 gen-class 定义静态初始值设定项

标签 clojure gen-class

我正在从 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 中放入什么声明以及实现它的函数应该使用哪个名称?

谢谢。

最佳答案

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

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

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

btw - 顺便说一句,在 JVM 中,静态初始值设定项“方法”的名称是 <clinit>

关于clojure - 如何使用 gen-class 定义静态初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11783736/

相关文章:

clojure - Clojure 是否可以有效地内联原始操作?

java - Clojure——如何使用 deftype 定义公共(public)可变成员?

clojure - 如何在 clojure 中迭代 ArrayMap?

clojure - 为什么两个集合不相等?

ruby - 有没有一种好方法可以让 Ruby 通过某种类型的桥与 Clojure 对话,反之亦然?

clojure - gen-class 可以覆盖 protected Java 方法吗?

clojure gen 类可变参数构造函数

clojure - @(在符号中)在Clojure中是什么意思?

java - lein自定义java类未找到异常