Проблема перезаписи java метода из clojure - PullRequest
0 голосов
/ 07 февраля 2020

Я отчаянно пытаюсь создать класс с помощью метода "toString" из clojure. В соответствии с документами clojure должно работать следующее:

(ns override-test.simpleClass
   (:gen-class
     :name         simpleClass
     :methods      [[^{Override {}}  toString [] String]]
     :state        state
     :init         init
     :constructors {[String] []}))
(defn -init
  [name_]
  [[] (atom name_)])
(defn -toString [this]
  (deref (.state this)))

Однако оценивая (simpleClass. "test") Броски
CompilerException java.lang.ClassFormatError: Duplicate method name "toString" with signature "()Ljava.lang.String;" in class file simpleClass, compiling:(override_test/simpleClass.clj:19:3) Есть какие-то побуждения, что я могу делать неправильно?

1 Ответ

1 голос
/ 07 февраля 2020

Как отметил Бипед Филл, проблема заключалась в том, что toString, похоже, уже реализован благодаря автоматическому механизму подклассов c в gen-классе. Вероятно, L java .lang. String обрабатывается как (?) Суперкласс, и toString добавляется автоматически, поэтому мне просто нужно было удалить его из методов: методы, которые не предназначены для наследуемых методов, и он работал как шарм.

...