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