簡體   English   中英

從JSNI調用Java方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM