Ric*_*rtz 3 generics scala traits
基本上,我正在尝试执行以下操作:
trait Foo[T] extends T {
def json: Writes[T]
def bar: String = {
Json.toJson[T](this)(json).toString
}
}
Run Code Online (Sandbox Code Playgroud)
我希望编译器强制使用trait Foo的任何类都是T类.不幸的是,'extends T'无效.现在,我能做的最好的事情如下:
trait Foo[T] extends T {
def json: Writes[T]
def bar: String = {
Json.toJson(this.asInstanceOf[T])(json).toString
}
}
Run Code Online (Sandbox Code Playgroud)
但显然,编译器没有强制执行任何操作.反正有没有实现我想要的?
您可以使用self类型来要求任何扩展的类Foo[T]也是以下的实例T:
import play.api.libs.json._
trait Foo[T] { self: T =>
def json: Writes[T]
def bar: String = Json.toJson[T](self)(json).toString
}
Run Code Online (Sandbox Code Playgroud)
您可以使用您想要的任何名称代替self(这只是一个常见的约定).