我正在尝试使用 GWT 的 JSNI 通过本机代码调用 Java 函数。Java 函数中有一个枚举,我很想知道枚举是否会以我想要的方式编组。我在 Google 或 SO 上找不到任何有用的东西,而且Google 基本文档也不是很具体。我相信我会在编译和运行时发现,但我想我不妨问问。
给定这样的大大简化的代码:
package my.example.package;
public class Giant {
public enum GiantWord { FEE, FIE, FO, FUM };
public void sayGiantWord(GiantWord word) { /* ... */ }
public native JavaScriptObject toJS() /*-{
var Giant = function() {
this.sayGiantWord = function(word) {
this.@my.example.package::sayGiantWord(Lmy/example/package/Giant$GiantWord;)(word);
};
};
return new Giant();
}-*/;
}
编辑- 根据评论,让我给出 toJS 函数的替代版本,并避免this
和this.
public static native JavaScriptObject toJS(final Giant g) /*-{
var Giant = function() {
this.sayGiantWord = function(word) {
g.@my.example.package::sayGiantWord(Lmy/example/package/Giant$GiantWord;)(word);
};
};
return new Giant();
}-*/;
sayGiantWord("FEE")
从 JavaScript 中调用(在适当获取的 var from 上toJS()
)是否可以正常工作?换句话说,JSNI 编组器会正确地将字符串转换为其匹配的 Java 枚举吗?
我希望调用sayGiantWord(1)
更容易正确编组,因为 int 可以轻松转换为枚举。
其他注意事项:
- GWT Eclipse 插件为我提供了访问类成员枚举的语法。至少到目前为止,GWT 正在与我合作。
- 我不想传递数字,如果有必要,我知道我可以使用 Java 类中的转换函数处理字符串,如下所示;我宁愿不这样做。
public void sayGiantWordJS(String word) {
// convert the string to an enum
// call sayGiantWord
}
感谢您的任何建议!