Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
没有使用reify与Clojure Java互操作进行匹配的方法_Clojure_Clojure Java Interop - Fatal编程技术网

没有使用reify与Clojure Java互操作进行匹配的方法

没有使用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

我对某个Clojure/Java互操作有一个误解

我正在使用Pi4J库,我想在GPIO引脚上获得一个侦听器

用法文档:(在“侦听Pin更改”下)给出了以下示例:

公共静态类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])