[英]Calling Java method from JSNI
我有一個課程,例如:
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();
}-*/;
從JavaScript文檔中訪問Java方法和字段 :
語法為:
[instance-expr.]@class-name::method-name(param-signature)(arguments)
實例表達式。 :在調用實例方法時必須存在,並且在調用靜態方法時必須不存在
class-name :是在其中聲明方法的類(或其子類)的標准名稱。
param-signature :是在JNI Type Signatures中指定的內部Java方法簽名,但是沒有方法返回類型的尾隨簽名,因為不需要選擇重載
arguments :是傳遞給被調用方法的實際參數列表
這是JNI類型簽名:
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()();
}-*/;
用真實的包名稱替換your.package.name
。
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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.