簡體   English   中英

如何從GWT JSNI訪問靜態方法ID

[英]How to access static method id from GWT JSNI

我無法從GWT JSNI中的MyJavaObject中獲得request_id,例如本示例,但是得到了未定義的值。

請幫忙。

JAVA類

package com.my.app;

    class MyJavaObject
    {
        public final int request_id;

        public MyJavaObject(int request_id)
        {
            this.request_id = request_id;
        }

        public static final MyJavaObject MY_REQUEST = new MyJavaObject(13);
    }

GWT JSNI

public static native void expose()/*-{

    var val = @com.my.app.MyJavaObject::MY_REQUEST.request_id;

}-*/;

您正在嘗試從靜態方法訪問非靜態成員變量,而無需對該對象進行任何引用

在此處閱讀文檔: http : //www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields ,您的方法應這樣編寫:

public static native void expose()/*-{

    var val = this.@com.my.app.MyJavaObject::request_id;
    // Do something with val...
}-*/;

評論后編輯:

也許這可以工作:

public static native void expose()/*-{

    var val = @com.my.app.MyJavaObject::MY_REQUEST.@com.my.app.MyJavaObject::request_id;
    // Do something with val...
}-*/;

如果沒有,則將您的對象作為參數傳遞:

public static native void expose( MyJavaObject obj)/*-{

    var val = obj.@com.my.app.MyJavaObject::request_id;
    // Do something with val...
}-*/;

然后直接調用expose( MY_REQUEST )或創建一個輔助函數

public static native void expose() {
    return expose( MY_REQUEST );
}

問題在於,當您引用MY_REQUEST字段所在的完整類型時,卻沒有引用request_id所在的完整類型。 由於JS具有不同的類型層次結構概念,因此當我們從JS引用Java時,我們需要非常具體。

引用MY_REQUEST ,是通過使用MY_REQUEST :: fieldname語法來實現的。 您還必須執行此操作以獲取request_id字段:

public static native void expose()/*-{
  var myRequest = @com.my.app.MyJavaObject::MY_REQUEST;
  var id = myRequest.@com.my.app.MyJavaObject::request_id;
  //do something useful with these values...
}-*/;

這也可以一行完成,但往往難以理解,因此我避免使用。

暫無
暫無

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

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