Я не знаком с написанием Java для Raspberry Pi, но, глядя на javadoc , мы видим следующие объявления:
public void addListener(GpioPinListener... listener);
public void addListener(List<? extends GpioPinListener> listeners);
Оба принимают множество слушателей, а не толькоодин.В приведенном выше примере с Java Java-компилятор прозрачно превращает отдельный экземпляр прослушивателя в вектор сингелтона и использует первое определение, показанное выше.
Компилятор clojure не знает, как это сделать, вы должны помочь ему.По сути, вопрос сводится к , как вызывать переменные Java-функции из clojure .
Без проверки этого, я считаю, что решение будет использовать функцию Clojure into-array
,так что-то вроде следующего:
(.addListener myButton
(into-array GpioPinListenerDigital
[(reify GpioPinListenerDigital
(^void handleGpioPinDigitalStateChangeEvent [this ^GpioPinDigitalStateChangeEvent event]
(println (str " --> GPIO PIN STATE CHANGE: " (.getPin event) " = " (.getState event)))))]))
Возможно, вам придется немного это изменить, но я считаю, что это основная проблема, с которой вы сталкиваетесь.
Редактировать
В связи со вторым объявлением выше, другое потенциальное решение может просто заключить его в некоторый обычный список, например в вектор:
(.addListener myButton
[(reify GpioPinListenerDigital
(^void handleGpioPinDigitalStateChangeEvent [this ^GpioPinDigitalStateChangeEvent event]
(println (str " --> GPIO PIN STATE CHANGE: " (.getPin event) " = " (.getState event)))))])