1

根据 RestyGWT文档,必须使用抽象超类才能使其工作,例如,给定:

@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 时开始收到错误。有人能够做到这一点吗?

谢谢!

4

1 回答 1

1

为什么不定义你的接口并让你的抽象类实现它呢?

于 2013-10-01T13:14:56.093 回答