作为新项目的一部分,我正在尝试快速学习 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 调用 varargs JavaScript 方法将导致被调用者接收数组中的参数”。我认为这意味着我至少可以检查 params.length,但是访问它会抛出一个包裹在 UmbrellaException 中的 JavascriptException,而没有任何真实信息。当我执行“typeof(params)”时,它返回“function”。好像这还不够奇怪,如果我检查 params 的字符串值,它会返回似乎是 Java 引用的字符串版本。
所以,我想我在这里问了几个不同的问题:
1) GWT/JSNI 可变参数是如何工作的,我需要做一些特殊的事情来传递值吗?
2)这里到底发生了什么?
3) 有没有更简单的方法在 GWT 应用程序中获取 printf() 样式的格式?