我没能像GWT JSNI那样从MyJavaObject获取request_id,就像这个例子一样,但得到了未定义的值。
请帮忙。
JAVA CLASS
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;
}-*/;
答案 0 :(得分:0)
您尝试从静态方法访问非静态成员变量,而不引用此对象
在这里阅读文档:http://www.gwtproject.org/doc/latest/DevGuideCodingBasicsJSNI.html#methods-fields,您的方法应该是这样写的:
var posLeft = ui.handle.offsetLeft;
评论后编辑:
也许这可行:
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 )
答案 1 :(得分:0)
问题在于,当您引用onStartCommand()
字段所在的完整类型时,您不引用MY_REQUEST
所在的完整类型。由于JS具有非常不同的类型层次结构概念,因此当我们从JS引用Java时,我们需要非常具体。
当您引用request_id
时,您是通过使用@classname :: fieldname语法完成的。您还必须执行此操作才能获得MY_REQUEST
字段:
request_id
这也可以在一行中实现,但往往是不可读的,所以我要避免它。