Как вызвать метод суперкласса в методе класса Gen Clojure? - PullRequest
10 голосов
/ 30 января 2012

Я пытаюсь создать класс, который расширяет поток ввода Clojure через gen-class.Если я хочу вызвать метод родительского класса, как мне это сделать?

Ответы [ 2 ]

11 голосов
/ 30 января 2012

С (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 голос
/ 30 января 2012

Это не ответ на ваш реальный вопрос, но у меня есть небольшая библиотека, позволяющая вам притвориться, что InputStream - это интерфейс вместо класса (так что вам вообще не нужен gen-класс).Извлеките io.core.InputStream, который позволяет вам набрать io.core.InputStreamable и получить настроенный InputStream.Независимо от того, какие поля экземпляра вам нужны, это могут быть только местные жители, закрытые reify.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...