Gwt - 如何将叠加层(JavaScriptObject)“转换”为真正的Java对象?

时间:2011-08-11 08:59:23

标签: gwt

在我的GWT项目中,我真的需要在几个叠加层之间实现相同的接口(JavaScriptObject)。

根据文件:

  

从GWT 2.0开始,JavaScriptObject子类型允许实现接口。接口中定义的每个方法都可以映射到JavaScriptObject子类型中声明的最多一个方法。实际上,这意味着只有一个JavaScriptObject类型可以实现任何给定的接口,但是任何数量的非JavaScriptObject类型也可以实现该接口。

所以,我想把我的JavaScriptObject“转换”为真正的Java对象。它允许我大量减少重复代码。

有可能吗? 感谢。

1 个答案:

答案 0 :(得分:1)

如何创建包装JSON的类而不是继承它?

public class PersonJso extends JavaScriptObject{
    protected PersonJso() {}
    public static native PersonJso create(String name) /*-{
        return {name : name};
    }-*/;
    public final native String getName() /*-{
        return this.name;
    }-*/;
}

public class AnimalJso extends JavaScriptObject{
    protected AnimalJso() {}
    public static native PersonJso create(String name) /*-{
        return {name : name};
    }-*/;
    public final native String getName() /*-{
        return this.name;
    }-*/;
}
public class AnimalWrapper implements hasName{
    AnimalJso jso;
    public AnimalWrapper(){}
    public AnimalWrapper(AnimalJso jso){
        this.jso = jso;
    }
    @Override
    public String getName() {
        return jso.getName();
    }
}
public class PersonWrapper implements hasName{
    PersonJso jso;  
    public PersonWrapper(){}
    public PersonWrapper(PersonJso jso){
        this.jso = jso;
    }
    @Override
    public String getName() {
        return jso.getName();
    }   
}