使用Play Framework的JSON库,我正在尝试为Reads[Obj]
定义:
Obj.java
public class Obj {
private Long id;
private String description;
private Set<Group> groups;
public Obj(Long id, String description, Set<Group> groups) {
// set fields
}
}
但是,当我使用_.asJava
时,我得到missing parameter type
编译时错误。
import play.api.libs.json._
import play.api.libs.functional.syntax._
import scala.collection.JavaConverters._
implicit val ObjReads: Reads[Obj] = (
(JsPath \ "id").read[Long] and
(JsPath \ "description").read[String] and
(JsPath \ "groups").read[Set[Group]] and
)(new Obj(_,_,_.asJava))
请注意,我需要致电asJava
将scala.collection.immutable.Set
转换为java.util.Set
。
如果没有命名每个参数及其类型,我怎样才能在第三个元素上简洁地调用asJava
?
答案 0 :(得分:1)
你不能总是只使用下划线而不是名字,因为编译器并不总是知道你想如何解决它们。
def f(a: String, b: String) = f"$a~$b"
Vector(1,2,3).foldLeft("0")(f(_, _.toString)) // ERROR
Vector(1,2,3).foldLeft("0")((z,x) => f(z, x.toString)) // fine
只需为参数命名即可轻松修复它。