使用接口而不是抽象类时,RestyGWT Polymorphic Encode / Decode问题

时间:2013-10-01 02:00:50

标签: json gwt resty-gwt

根据RestyGWT documentation,必须使用抽象超类来实现这一点,例如,给定:

@JsonSubTypes(@Type(value=PersonImpl.class, name="PersonImpl"))
@JsonTypeInfo(use=Id.NAME, include=As.PROPERTY, property="@class")
public abstract class Person{
    public abstract String getName();
    public abstract void setName(String name);
}

@JsonTypeName("PersonImpl")
public class PersonImpl extends Person{
    private String name;

    @Override
    public final String getName() {
        return name;
    }
    @Override
    public final void setName(String name) {
        this.name = name;
    }
}

如果我使用定义的编码器/解码器,这将起作用:

Person personInstance = new PersonImpl();
personInstance.setName("TestName");

PersonCodec codec = GWT.create(PersonCodec.class);
JSONValue json = codec.encode(personInstance);

我试图做一些非常相似但有一些差别的事情,也就是说,而不是 Person 是一个抽象类,我希望它是一个接口:

@JsonSubTypes(@Type(value=PersonImpl.class, name="PersonImpl"))
@JsonTypeInfo(use=Id.NAME, include=As.PROPERTY, property="@class")
public interface Person{
    public String getName();
    public void setName(String name);
}

由于某些原因,这似乎不起作用,一旦我这样做,我就开始在生成JsonEncoderDecoder时获得错误。有人能够做到这一点吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

为什么不定义你的界面并使你的抽象类实现它?