如何在Clojure gen-class方法中调用超类'方法?

时间:2012-01-30 06:23:37

标签: clojure

我正在尝试创建一个通过gen-class扩展输入流Clojure的类。如果我想调用父类的方法,我该怎么做?

2 个答案:

答案 0 :(得分:11)

来自(doc gen-class) 1

:exposes-methods {super-method-name exposed-name, ...}

It is sometimes necessary to call the superclass' implementation of an
overridden method.  Those methods may be exposed and referred in 
the new method implementation by a local name.

所以,为了能够调用父的fooBar方法,你会说

(ns my.custom.Foo
  (:gen-class
    ; ...
    :exposes-methods {fooBar parentFooBar}
    ; ...
    ))

然后实施fooBar

(defn -fooBar [this]
  (combine-appropriately (.parentFooBar this)
                         other-stuff))

1 :gen-class表单提供的ns工具外,还有一个gen-class宏。

答案 1 :(得分:1)

这不是你实际问题的答案,但我有一个小库让你假装InputStream是一个接口而不是一个类(所以你根本不需要gen-class)。查看io.core.InputStream,它可以让您了解io.core.InputStreamable并获得自定义的InputStream。您需要的任何实例字段都可以是由reify关闭的本地人。