如何从GWT JSNI访问静态方法id

时间:2015-09-15 10:55:52

标签: java gwt jsni

我没能像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;

}-*/;

2 个答案:

答案 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

这也可以在一行中实现,但往往是不可读的,所以我要避免它。