我有一个班级,例如:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void sayName() {
System.out.println(name);
}
}
如果我调用这样的方法(或者我的无知或错误),它会起作用吗?
public native void someMethod (Person person) /*-{
person.sayName();
}-*/;
答案 0 :(得分:5)
来自Accessing Java Methods and Fields from JavaScript文档:
语法为:
i;T
0;1
1;2
2;3
3;4
4;3
instance-expr。:调用实例方法时必须存在,调用静态方法时必须不存在
class-name :是声明方法的类的完全限定名称(或其子类)
param-signature :是JNI Type Signatures中指定的内部Java方法签名,但没有尾随签名 方法返回类型,因为不需要选择重载
参数:是传递给被调用方法的实际参数列表
以下是JNI类型签名:
[instance-expr.]@class-name::method-name(param-signature)(arguments)
在你的情况下(没有参数),它将是:
Type Signature Java Type
Z boolean
B byte
C char
S short
I int
J long
F float
D double
L fully-qualified-class ; fully-qualified-class
[ type type[]
( arg-types ) ret-type method type
For example, the Java method:
long f (int n, String s, int[] arr);
has the following type signature:
(ILjava/lang/String;[I)J
将public native void someMethod (Person person) /*-{
person.@your.package.name.client.Person::sayName()();
}-*/;
替换为真实的包名。
答案 1 :(得分:1)
package org.example.foo;
public class Flipper {
public native void flipName(String name) /*-{
var re = /(\w+)\s(\w+)/;
var s = name.replace(re, '$2, $1');
this.@org.example.foo.Flipper::onFlip(Ljava/lang/String;)(s);
}-*/;
private void onFlip(String flippedName) {
// do something useful with the flipped name
}
}