本质上,我正在尝试执行以下操作:
trait Foo[T] extends T {
def json: Writes[T]
def bar: String = {
Json.toJson[T](this)(json).toString
}
}
我希望编译器强制任何使用特征 Foo 的类都属于 T 类型。不幸的是,'extends T' 无效。现在,我能做的最好的是:
trait Foo[T] extends T {
def json: Writes[T]
def bar: String = {
Json.toJson(this.asInstanceOf[T])(json).toString
}
}
但显然,编译器并没有强制执行任何操作。有没有办法实现我想要的?
最佳答案
您可以使用 self type要求任何扩展 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
}
您可以使用任何您想要的名称来代替 self
(这只是一个通用约定)。
关于scala - 使用泛型强制 Scala 特征的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32702311/