gpt4 book ai didi

Java 变量参数和 rhino

转载 作者:行者123 更新时间:2023-11-29 08:57:30 25 4
gpt4 key购买 nike

我试图让我的所有 Java 方法都可以从 javascript 脚本访问。

因为我想要“快捷方式”,所以我遵循了以下指南:https://stackoverflow.com/a/19197130/2897090 .但是,当我的 Java 方法具有可变参数时,我无法“公开”该方法以使用 javascript 语言。

public void printf(String format, Object... args) {
out.printf(format, args);
}
//Gives org.mozilla.javascript.EvaluatorException: Unsupported parameter type "[Ljava.lang.Object;" in method printf

其他:

如果我尝试仅使用“javascript”创建“printf 的快捷方式”:

function printf(format){
java.lang.System.out.printf(format, arguments);
}

如果我输入任何内容,我会收到 org.mozilla.javascript.Arguments@NNNNNN。如何解决?

谢谢。

更新

因为我没有找到任何解决方案,所以我改变了方法:现在我只使用 ScriptEngine。实际上我正在做的是公开整个对象(不仅仅是函数)。不幸的是,每次我需要调用一个函数时,我都需要在它前面加上我公开的对象的名称。

无论如何,我可以用可变参数创建我的 Java 方法,并在 JavaScript 端使用它们而无需任何修改。

最佳答案

我遇到了同样的问题。从那时起,他们更新了关于 FunctionObject 可能是什么的文档。它只能获取一小部分数据。这是我的解决方案:

@JSFunction
public void log(Object messages) {
if(messages instanceof List) {
console.log(((List)messages).toArray());
}
else if (messages instanceof Object[]) {
console.log(((Object[])messages));
}
else {
console.log(new Object[]{messages});
}
}

我想让它打印出一组对象。相反,我必须获取一个对象,然后在运行时使用反射来确定它是列表、数组还是单个对象,并提供适当的处理。

关于Java 变量参数和 rhino,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19463052/

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