0

我有一堆都实现的数据实体Entity。现在我想将其中一些实体暴露给 JavaScript 代码,但由于单一实现规则,我不能只创建一堆 JavaScriptObject 子类。

所以,我正在使用这种东西:

public class JsStandardScale3 implements StandardScale3 {

    private JavaScriptObject wrapped;

    public JsStandardScale3(JavaScriptObject wrapped) {
        this.wrapped = wrapped;
    }

    @Override
    public native Long getLicenseId() /*-{
        this.@com.activegrade.client.exported.JsStandardScale3::wrapped.getLicenseId();
    }-*/;

这行得通,只是工作量很大。覆盖类型结构要好得多。有什么建议么?

4

1 回答 1

2

事实证明,只要您的所有扩展都来自 JSO 的单个“根”扩展,您就可以使用接口的多个子类扩展 JavaScriptObject。

例如,我有结构标准扩展实体和课程扩展实体。我不能这样做:

JsStandard extends JavaScriptObject...
JsCourse extends JavaScriptObject...

但我可以这样做:

JsEntity extends JavaScriptObject...
JsStandard extends JsEntity...
JsCourse extends JsEntity...

极好的!

唯一的限制是每个方法都必须标记为 final,这对于简单的覆盖场景来说很好用。

于 2013-01-15T21:29:18.750 回答