2011-05-24 64 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