小编use*_*316的帖子

为Clojure中的对象的特定实例创建代理

我正在尝试创建一个代理对象,该对象使用闭包(let / proxy)为对象的某些方法添加一些功能,但是我很乐意从原始对象重写所有方法,我得到一个UnsupportedOpretationException,这里是一个例子:真实的对象

(def realcon (java.sql.DriverManager/getConnection "jdbc:h2:tcp://localhost:9092/test"))


(def con 
    (let [msg "FG>"
          xcon rcon]
        (proxy [java.sql.Connection] []
            (createStatement []
                (println msg) ;; access to closure context !
                (.createStatement xcon)))))

(def stmt (.createStatement con))
;;output FG>

(def rs (.executeQuery stmt "select count(*) from serie_sat"))
Run Code Online (Sandbox Code Playgroud)

如果我从java.sql.Connection调用任何其他方法,则会得到UnsupportedOperationException,我可以手工代理所有方法,但是可能存在更好的方法!

谢谢

proxy clojure object instance

4
推荐指数
2
解决办法
814
查看次数

标签 统计

clojure ×1

instance ×1

object ×1

proxy ×1