簡體   English   中英

如何在JSNI中使用GWT $ entry函數?

[英]How to use GWT $entry Function in JSNI?

GWT中的$ entry函數用於獲取從JavaScript報告給GWT的未捕獲異常。

以下$ entry調用和正確的調用有什么區別?

以下版本調用實例Java函數。

版本1:

public final native String test(double arg) /*-{
    var instance = this;

    var callExternal = $entry(function(arg) {
       return instance.@com.example.MyClass::javaFunction(D)(arg);
    });

    var x = callExternal(arg);
}-*/;

版本2:

public final native String test(double arg) /*-{
    var x = $entry(instance.@com.example.MyClass::javaFunction(D)(arg));
}-*/;

我使用靜態或非靜態Java函數有其他用途嗎?

更新:

以下版本調用靜態Java函數。

版本1:

public final native String test(double arg) /*-{

    var callExternal = $entry(function(arg) {
       return@com.example.MyClass::javaFunction(D)(arg);
    });

    var x = callExternal(arg);
}-*/;

版本2:

public final native String test(double arg) /*-{
    var x = $entry(@com.example.MyClass::staticJavaFunction(D)(arg));
}-*/; 

第二個是錯誤的:它調用方法然后包裝結果。 它是無用的,甚至可能壞掉了。

$entry將一個函數包裝在另一個使用try / catch的函數中。

題:

我使用靜態或非靜態Java函數有其他用途嗎?

回答:

使用instance遵循instance.@com.example.MyClass::javaFunction(D)(arg);訪問static Java函數javaFunction出錯instance.@com.example.MyClass::javaFunction(D)(arg);

錯誤:

Unnecessary qualifier on static method 'com.example.MyClass.javaFunction'

- 編輯 -

兩者都適用於靜態java函數,如下所示:

public static void staticJavaFunction(double d){
    System.out.println(d);
}

public final native String test(double arg) /*-{
    var x = $entry(@com.gwt.test.client.GWTTestProject::staticJavaFunction(D)(arg));
}-*/; 

public final native String test(double arg) /*-{
    var callExternal = $entry(function(arg) {
       return @com.gwt.test.client.GWTTestProject::staticJavaFunction(D)(arg);
    });

    var x = callExternal(arg);
}-*/;

兩者對於非靜態java函數也都可以正常工作,如下所示:

注意:版本2中只有一個更改,其中var instance = this; 失蹤。

public void javaFunction(double d){
    System.out.println(d);
}

public final native String test(double arg) /*-{
    var instance = this;
    var x = $entry(instance.@com.gwt.test.client.GWTTestProject::javaFunction(D)(arg));
}-*/;

public final native String test(double arg) /*-{
    var instance = this;

    var callExternal = $entry(function(arg) {
       return instance.@com.gwt.test.client.GWTTestProject::javaFunction(D)(arg);
    });

    var x = callExternal(arg);
}-*/;

在這兩種情況下,我都傾向於使用版本2。

您可以嘗試:

public final native String test1(double arg) /*-{
    var instance = this;
    var x = $entry(function(a) {
        return instance.@com.example.MyClass::javaFunction(D)(a);
    })(arg);
    return x;
}-*/;

對於靜態調用,您可以使用:

public final native String test2(double arg) /*-{
    var x = $entry(@com.example.MyClass::staticJavaFunction(D))(arg);
    return x;
}-*/; 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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