2011-05-24 66 views
1

我有一個JSON轉換爲JNI覆蓋類型的問題。 Java代碼有下面的方法:GWT問題與長在Javascript JNI覆蓋類型

long nr = 10l; 
public Long getNr() { 
    return nr; 
} 

的JNI疊加類型是:

public final native Long getNr() /*-{ 
    return this.nr; 
}-*/; 

我回避與所述覆蓋型的長原語操作,因爲編譯器不允許它。官方文件稱這是低效的,但它應該起作用。但是,我得到:

java.lang.IllegalArgumentException: Something other than a Java object was returned from JSNI method '@com.avaya.thunder.portal.client.shared.model.Customer::getNr1()': JS value of type int, expected java.lang.Object 
at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:178) 
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:271) 

我正在使用GWT 2.2.0。

這是我做錯了什麼?這應該工作嗎?任何幫助表示讚賞。 謝謝。

回答

1

你需要把在龍對象,如果你想獲得一個出來:

public native void setNr(Long val) /*-{ 
    this.nr = val; 
}-*/; 

不幸的是,這意味着,「NR」將在JavaScript中的不透明物體。通常,如果我們想要在JS和Java中操作數字,我們會繞過'double'原語。這樣就沒有意外(Java原始雙映射直接指向Js類型的數字)。

+0

我現在明白,GWT編譯器只能模擬java代碼中的long,並且一旦我們拖拽JSNI級別,編譯器就不會觸及該代碼。謝謝。 – Eugen 2011-05-28 20:38:47