没有使用reify与Clojure Java互操作进行匹配的方法
我对某个Clojure/Java互操作有一个误解 我正在使用Pi4J库,我想在GPIO引脚上获得一个侦听器 用法文档:(在“侦听Pin更改”下)给出了以下示例:没有使用reify与Clojure Java互操作进行匹配的方法,clojure,clojure-java-interop,Clojure,Clojure Java Interop,我对某个Clojure/Java互操作有一个误解 我正在使用Pi4J库,我想在GPIO引脚上获得一个侦听器 用法文档:(在“侦听Pin更改”下)给出了以下示例: 公共静态类gpioageExampleListener实现GpioPinListenerDigital{ @凌驾 public void handlePiopIndicatalStateChangeEvent(GPIOPiIndigitalStateChangeEvent){ //在控制台上显示pin状态 System.out.prin
公共静态类gpioageExampleListener实现GpioPinListenerDigital{
@凌驾
public void handlePiopIndicatalStateChangeEvent(GPIOPiIndigitalStateChangeEvent){
//在控制台上显示pin状态
System.out.println(“-->GPIO引脚状态更改:“+event.getPin()+”=”
+event.getState());
}
}
//创建并注册gpio引脚侦听器
myButton.addListener(新的gpioageExampleListener());
还有一个示例应用程序:
其中:
myButton.addListener(新的GpioPinListenerDigital(){
@凌驾
public void handlePiopIndicatalStateChangeEvent(GPIOPiIndigitalStateChangeEvent){
//在控制台上显示pin状态
System.out.println(“-->GPIO引脚状态更改:”+event.getPin()+“=”+event.getState());
}
});
因此,我正在尝试以下Clojure代码:
(导入[com.pi4j.io.gpio GpioFactory gpiopinditalinput PinPullResistance RaspiPin]
[com.pi4j.io.gpio.event GpioPinListenerDigital])
(def gpio(GpioFactory/getInstance))
(def mybutton(.ProvisioningDigitalInputPin gpio RaspiPin/gpio_02 PinPullResistance/PULL_DOWN))
(定义gpio侦听器(具体化GpioPinListenerDigital
(HandlegPiopIndicatalStateChangeEvent[此事件]
(println“发生GPIO事件”))
(.addListener mybutton gpio listener)
但我得到:
No matching method addListener found taking 1 args for class com.pi4j.io.gpio.impl.GpioPinImpl
通过使用反射,我查看了mybutton实例可用的方法,我可以看到该方法:
(clojure.reflect/reflect mybutton)
:成员
#{{
修剪过的东西
{:name addListener,
:返回类型void,
:声明类com.pi4j.io.gpio.impl.GpioPinImpl,
:参数类型[java.util.List],
:异常类型[],
:flags#{:public:synchronized}
{:name addListener,
:返回类型void,
:声明类com.pi4j.io.gpio.impl.GpioPinImpl,
:参数类型[com.pi4j.io.gpio.event.GpioPinListener],
:异常类型[],
:flags{:varargs:public:synchronized}}
我已经成功地对照GpioPinListener检查了gpio侦听器的类型
(cast com.pi4j.io.gpio.event.GpioPinListener gpio listener)
#对象[用户$reify\uuu 7404 0x11251bd”用户$reify__7404@11251bd"]
我尝试将参数类型暗示给GpioPinListener,但得到了相同的结果
我缺乏Clojure和Java知识,这让我很失望,所以我有点不知所措,但我确信这是非常基本的东西。我无法测试这一点,但如果你注意到,你会发现
addListener
实际上是var-arg,处理var-arg方法可能会让人困惑
addListener
需要一个侦听器数组(由Java var arg语法进行糖化)。试一试
或者,由于addListener
实际上有一个列表
重载,这也可能起作用
(.addListener myButton [gpio-listener])
两者都有效。:)我根本没有注意到var args。将来我必须记住它。非常感谢。
(.addListener myButton [gpio-listener])