Проблемы RestyGWT Polymorphic Encode/Decode при использовании интерфейса вместо абстрактного класса

Согласно документации 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. Кто-то смог добиться этого?

Спасибо!


person Chepech    schedule 01.10.2013    source источник
comment
Я требую, чтобы Person был интерфейсом для удобства модульного тестирования.   -  person Chepech    schedule 01.10.2013


Ответы (1)


Почему бы не определить свой интерфейс и реализовать его в абстрактном классе?

person tom    schedule 01.10.2013