我正在尝试创建一个代理对象,该对象使用闭包(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,我可以手工代理所有方法,但是可能存在更好的方法!
谢谢