覆盖Clojure中的java超类方法

时间:2013-08-23 19:08:20

标签: java clojure override javafx

我正在按照TableView示例做一些JavaFX。在原始java中,作者@Override是他直接派生的几个TableCell类方法,而@OverrideupdateItem方法中的Cell方法。类层次结构,属于proxy类。

有没有办法在Clojure中轻松完成这项工作?目前我正在做:gen-class,但如果有必要,我可以使用(defn make-editing-cell [] (let [textField (atom nil)] (proxy [TableCell] [] (startEdit [] (proxy-super startEdit) (println "start editing")) (cancelEdit [] (proxy-super cancelEdit) (println "cancel editing")) (updateItem [item empty] ;(proxy-super updateItem ) ;; This causes runtime error No Matching Field Found (if empty (do (println "empty!") (doto this (.setText nil) (.setGraphic nil))) (do (println "not empty!") (if (.isEditing this) (do (println "editing") (if (not @textField) (.setText @textField (.toString (.getItem this)))) (doto this (.setGraphic @textField) (.setContentDisplay ContentDisplay/GRAPHIC_ONLY))) (do (println "not editing") (println this) (println (.getItem this)) (comment (doto this (.setText (.toString (.getItem this))) (.setContentDisplay ContentDisplay/GRAPHIC_ONLY))))))) (println "updating item" item empty))))) 。我以为我读到的地方只能覆盖Clojure中的直接基类。

{{1}}

1 个答案:

答案 0 :(得分:1)

我需要将参数itemempty传递给proxy-super来电......所以(proxy-super updateItem item empty)