Проблема расширения класса в Clojure: ClassFormatError: повторяющееся имя поля и подпись

Я пытаюсь расширить JButton с помощью Clojure, но столкнулся с проблемой, когда пытался создать свои собственные конструкторы. Всякий раз, когда я использую :constructors с :gen-class Я продолжаю получать сообщение "ClassFormatError: Duplicate name field &signature" при попытке создать экземпляр моего класса.

Я думаю, что я следую документации Clojure должным образом. Я делаю что-то неправильно?

Пример:

(ns test.gui.button
  (:gen-class
   :extends javax.swing.JButton
   :constructors {[] [String]}
   :init init))

(defn -init []
  [["Click Me"] nil])

1 ответ

Решение

JButton продолжается javax.swing.AbstractButton который уже имеет защищенный init метод. Если вы переименуете свою функцию Clojure-init, например, в my-init проблема исчезла:

(ns test.gui.button
  (:gen-class
   :extends javax.swing.JButton
   :constructors {[] [String]}
   :init my-init))

(defn -my-init []
  [["Click Me"] nil])
Другие вопросы по тегам