Gwt-我怎么能;铸造;将覆盖(JavaScriptObject)转换为真正的Java对象?

Gwt-我怎么能;铸造;将覆盖(JavaScriptObject)转换为真正的Java对象?,gwt,Gwt,在我的GWT项目中,我确实需要在多个覆盖(JavaScriptObject)之间实现相同的接口 根据文件: 从GWT2.0开始,允许JavaScriptObject子类型实现接口。接口中定义的每个方法最多可以映射到JavaScriptObject子类型中声明的一个方法。实际上,这意味着只有一种JavaScriptObject类型可以实现任何给定的接口,但任何数量的非JavaScriptObject类型也可以实现该接口 因此,我想将我的JavaScriptObject“转换”为一个真正的Java对

在我的GWT项目中,我确实需要在多个覆盖(JavaScriptObject)之间实现相同的接口

根据文件:

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

因此,我想将我的JavaScriptObject“转换”为一个真正的Java对象。它允许我大大减少大量重复代码

可能吗?
谢谢。

创建封装JSO的类而不是嵌入JSO怎么样

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();
    }   
}

是的,我认为这是一个解决方案,但我必须写很多包装(完全是双包装!)。你认为这是唯一的解决方案吗?我想另一个解决方法可能是添加你打算用作空实体接口的方法,并创建一个CustomJSO。然后复制JSO以扩展CustomJSO。这样,您可以编写一个单独的包装器,将任何JSO包装为CustomJSO,这样您的包装器就可以实现任何包含已添加到CustomJSO的方法的接口。