我使用的是GWT,并且具有带有签名的Java方法,该签名需要一个字符串和一个布尔参数,如下所示:
private void myMethod(String s, Boolean b) {}
Run Code Online (Sandbox Code Playgroud)
我有一个JSNI方法,可在编译后公开此Java方法:
public class myClass {
public native void exportMyMethod(myClass c)/*-{
$wnd.myMethod = $entry(function(s, b) {
c.@com.path.to.myClass::myMethod(Ljava/lang/String;Z);
});
}-*/;
}
Run Code Online (Sandbox Code Playgroud)
为了我的一生,当有多个参数时,我无法弄清楚如何正确格式化参数签名。
我已经阅读了有关如何执行此操作的GWT文档。我还阅读了该文档的指导内容,以指导我如何正确地引用JNI Type。但是我似乎找不到使用多于1个参数时如何格式化签名的示例。看起来应该很容易。
那么,如何正确格式化我的参数签名?我试过了:
我尝试过的每个不同排列都导致了相同的错误。
“引用方法'com.path.to.myClass.myMethod(Ljava / lang / String; Z)/'无法解析方法。”
在Javascript中,与Java不同,您实际上可以像对待变量一样传递方法-您可以将其重新分配,将其分配给变量等。这意味着要使JSNI引用起作用,我们不仅需要给他们打电话,但要参考他们。
然后,标准的JSNI模式是 instance.@path.to.Class::method(arg;types;)(actual, params)
就您而言,这行
c.@com.path.to.myClass::myMethod(Ljava/lang/String;Z);
Run Code Online (Sandbox Code Playgroud)
应该改为这样
c.@com.path.to.myClass::myMethod(Ljava/lang/String;Z)(s, b);
Run Code Online (Sandbox Code Playgroud)
但是请注意,这Z是指boolean,而不是Boolean,因此您问题中的当前代码不一致。如果只有一个使用特定名称的方法,则可以省略类型并仅传递*:
c.@com.path.to.myClass::myMethod(*)(s, b);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |