在Clojure中将字段添加到代理类

mik*_*era 9 java proxy swing extends clojure

我正在使用"代理"来扩展Clojure GUI应用程序中的各种Swing类,通常代码类似于:

(def ^JPanel mypanel 
  (proxy [JPanel] []
    (paintComponent [#^Graphics g]
      (.drawImage g background-image 0 0 nil))))
Run Code Online (Sandbox Code Playgroud)

这很好但我无法弄清楚如何向新扩展的类添加其他字段,例如使background-image成为可以随后更新的字段.这在Java中是非常简单和常见的做法.

在Clojure中有一个很好的方法吗?或者是否有另一种方法可以达到同样的效果?

Igo*_*nov 9

你可以使用这样的东西:

(defn ^JPanel mypanel [state]
  (proxy [JPanel] []
    (paintComponent [#^Graphics g]
      (do
        (comment do something with state)
        (.drawImage g background-image 0 0 nil)))))
Run Code Online (Sandbox Code Playgroud)

或使用任何其他外部功能/参考.