gpt4 book ai didi

java - 如何将 Java varargs 与 GWT Javascript native 接口(interface)一起使用? (又名, "GWT has no printf()")

转载 作者:搜寻专家 更新时间:2023-10-31 20:06:32 24 4
gpt4 key购买 nike

作为新项目的一部分,我正在尝试快速学习 GWT。我发现 GWT 没有实现 Java 的 String.format() 函数,所以没有类似 printf() 的功能。我知道 Javascript 存在一些 printf() 实现,所以我想我可以将其中一个粘贴为 GWT Javascript native 接口(interface)函数。我遇到了问题,并决定最好确保可变参数值被正确传递。这就是事情变得丑陋的地方。首先,一些示例代码:

// From Java, call the JSNI function:
test("sourceString", "params1", "params2", "params3");

....

public static native void test(Object... params) /*-{
// PROBLEM: this kills GWT!
// alert(params.length);

// returns "function"
alert(typeof(params));

// returns "[Ljava.lang.Object;@b97ff1"
alert(params);
}-*/;

GWT 文档声明“从 Java 调用可变参数 JavaScript 方法将导致被调用方接收数组中的参数”。我想这意味着我至少可以检查 params.length,但是访问它会抛出一个 JavascriptException 包裹在一个 UmbrellaException 中,没有真正的信息。当我执行“typeof(params)”时,它返回“函数”。好像这还不够奇怪,如果我检查 params 的字符串值,它会返回似乎是 Java 引用的字符串版本。

所以,我想我在这里问了几个不同的问题:

1) GWT/JSNI 可变参数实际上是如何工作的,我是否需要做一些特殊的事情来传递值?
2) 这里到底发生了什么?
3) 有没有更简单的方法在 GWT 应用程序中获得 printf() 样式的格式?

最佳答案

您的 JSNI 方法正在接收参数,但不幸的是,无法对它们执行任何操作。传递给 JSNI 方法时,Java 数组(可变参数是通过构造传递参数的数组来实现的)是不透明的。但是,您可以使用 JsArrayString 来实现您的目标:

public static native void test(JsArrayString strings) /*-{
// strings is a normal JavaScript array of strings
}

并调用方法:

String[] jStrings = {"one", "two", "three"};
JsArrayString jsStrings = (JsArrayString)JsArrayString.createArray();

for (String s : jStrings) {
jsStrings.push(s);
}

test(jsStrings);

关于java - 如何将 Java varargs 与 GWT Javascript native 接口(interface)一起使用? (又名, "GWT has no printf()"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5085255/

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