在GWT Javascript覆盖类型(JSO)中使用Java常量



我想将GWT JSO属性名定义为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存在就没有问题了。

但这是如此完全不工作,我想我可能是错的。有人能解释一下为什么吗?你有更好的想法来实现这个目标吗?

谢谢!

引用静态变量的正确语法是:

@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;
    }
}-*/;

相关内容

  • 没有找到相关文章

最新更新