我正在为Java类创建Reads并Writes使用Play Framework的JSON库.
我的一个类有一个抽象类字段.
ConcreteObj.java
public class ConcreteObj {
private AbstractObj someField;
public ConcreteObj(AbstractObj someField) {
this.someField = someField;
}
public AbstractObj getSomeField() { return this.someField };
Run Code Online (Sandbox Code Playgroud)
...
读写
implicit val ConcreteObjReads: Reads[ConcreteObj] =
(JsPath \ "someField").read[AbstractObj].map{x: AbstractObj => new ConcreteObj(x)}
implicit val ConcreteObjWrites: Writes[ConcreteObj] =
(JsPath \ "someField").write[AbstractObj].contramap{x: ConcreteObj => x.getField}
Run Code Online (Sandbox Code Playgroud)
然而,下一步,创建一个Reads[AbstractObj],对我来说没有意义,因为抽象类无法实例化.
我想这Writes[AbstractObj]看起来像:
implicit val AbstractObjWrites: Writes[AbstractObj] =
(JsPath \ "otherField").write[String].contramap{x: AbstractObj => x.getOtherField}
Run Code Online (Sandbox Code Playgroud)
但是Reads[AbstractObj]呢?