簡體   English   中英

如何使用gen-class定義靜態初始化程序

[英]How can a static initializer be defined using 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 :load-impl-ns選項),但是沒有辦法將自己的自定義代碼添加到初始化程序中,我可以在查看genclass后看到.clj。

順便說一下 - 在JVM中,靜態初始化程序'方法'的名稱是<clinit>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM