gpt4 book ai didi

javascript - 使用 JSR223 调用重载静态方法时出现异常

转载 作者:行者123 更新时间:2023-11-28 06:45:57 26 4
gpt4 key购买 nike

我正在尝试使用 JSR223 ( http://www.openhab.org/ ) 在 Javascript 中实现 openHAB ( https://github.com/openhab/openhab/wiki/Jsr223-Script-Engine ) 规则。

有人对以下异常的根本原因有建议吗?请注意,作为参数传递的两个实例都实现了在方法声明中用作参数的接口(interface)。

java.lang.RuntimeException: java.lang.NoSuchMethodException: None of the fixed arity signatures [(org.openhab.core.items.Item, org.joda.time.base.AbstractInstant)] of method org.openhab.core.persistence.extensions.PersistenceExtensions.changedSince match the argument types [org.openhab.core.items.GroupItem, org.joda.time.DateTime]
at jdk.nashorn.javaadapters.java.util.function.Consumer.accept(Unknown Source) ~[na:na]
at java.util.ArrayList.forEach(ArrayList.java:1249) ~[na:1.8.0_31]
at jdk.nashorn.internal.scripts.Script$\^eval\_.L:13(<eval>:14) ~[na:na]
at org.openhab.core.jsr223.internal.shared.Rule$$NashornJavaAdapter.execute(Unknown Source) ~[na:na]
at org.openhab.core.jsr223.internal.engine.RuleExecutionRunnable.run(RuleExecutionRunnable.java:36) ~[na:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_31]

以下是实现的脚本:

'use strict';

load("nashorn:mozilla_compat.js");
importPackage(org.openhab.core.jsr223.internal.shared);
importPackage(org.joda.time);
importPackage(org.joda.time.base);


var autoOffRule = new org.openhab.core.jsr223.internal.shared.Rule() {
getEventTrigger: function() {
return [
new org.openhab.core.jsr223.internal.shared.TimerTrigger("* * * * * ?")
];
},
execute: function(event) {
for each(var item in ItemRegistry.getItems()) {
if (item.getState() == org.openhab.core.library.types.OnOffType.ON) {
var dateTime = org.joda.time.DateTime.now().withFieldAdded(DurationFieldType.seconds(), -5);

if (!(org.openhab.core.persistence.extensions.PersistenceExtensions.class.static.changedSince(item, var dateTime))) {
print("Auto-off for " + item.getName())
}
}
}
}
};

function getRules() {
return new org.openhab.core.jsr223.internal.shared.RuleSet([ autoOffRule ]);
}

被调用的方法已重载并具有以下签名:

org.openhab.core.persistence.extensions.PersistenceExtensions#changedSince(org.openhab.core.items.Item, org.joda.time.base.AbstractInstant)
org.openhab.core.persistence.extensions.PersistenceExtensions#changedSince(org.openhab.core.items.Item, org.joda.time.base.AbstractInstant, java.lang.String)

在 jdk1.8.0_31 和 jdk1.8.0_65 上进行了测试,但均失败。在 Groovy 中实现规则时遇到了或多或少类似的异常。

最佳答案

在回答这个问题时我知道我是一个死灵术士,但我偶然发现了它并且无法抗拒。

错误消息很明确:您尝试调用 Java 方法 org.openhab.core.persistence.extensions.PersistenceExtensions.changedSince(org.openhab.core.items.Item, org.joda.time.DateTime)带有GroupItem

Which is interesting since a GroupItem extends the GenericItem which implements the Item Interface因此应该与方法签名匹配。

使用 foreach(var item in ItemRegistry.getItems()) {,您可以从 OpenHab 项目定义中获取所有项目,包括所有组。您可能只想要真实的元素。尝试 if (! item.members ) 过滤所有组。

关于javascript - 使用 JSR223 调用重载静态方法时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33419924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com