在GWT Javascript Overlay Type(JSO)中使用Java常量?

时间:2011-12-08 21:39:43

标签: gwt gwt-2.4

我想在JSO中将GWT JSO属性名称定义为常量,以避免拼写错误并从Eclipse代码完成中获益,如下所示:

public final class MyJSO extends JavaScriptObject
{
    /** here is the constant */
    private static final String MY_CONST = "myPropName";

    protected MyJSO() {
        super();
    }

    public native void setMyProp(final boolean pFlag)
    /*-{
        this.@fully.qualified.MyJSO::MY_CONST = pFlag;
    }-*/;

    public native boolean isMyProp()
    /*-{
        if (this.hasOwnProperty(@fully.qualified.MyJSO::MY_CONST)) {
            return this.@fully.qualified.MyJSO::MY_CONST;
        } else {
            return false;
        }
    }-*/;
}

GWT编译器应该能够在编译时从常量替换String,因此以后生成Javascript的对象没有问题。

但这完全不起作用,我想我可能错了。 :-)任何人都可以解释为什么?你有更好的想法如何实现这个目标吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

引用静态变量的correct syntax是:

@fully.qualified.MyJSO::MY_CONST

由于变量是静态的,因此不需要限定符(在您的示例中为this.

如果要使用常量名称在JavaScript对象上设置/获取属性,请执行以下操作:

public native void setMyProp(final boolean pFlag) /*-{
    this[@fully.qualified.MyJSO::MY_CONST] = pFlag;
}-*/;

public native boolean isMyProp() /*-{
    if (this[@fully.qualified.MyJSO::MY_CONST] != null) {
        return this[@fully.qualified.MyJSO::MY_CONST];
    } else {
        return false;
    }
}-*/;