根据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时获得错误。有人能够做到这一点吗?
谢谢!
答案 0 :(得分:1)
为什么不定义你的界面并使你的抽象类实现它?