0
我想建立一个没有任何相关性的接口,只有Scala库集装箱类型Type类
让我们想象一下,这是我想要的东西:
iface.jar
如您所见,它不包含任何导入。
让我们去实现:
iface_implementation1.jar
import play.api.libs.json._
trait myPlayJsonImpl extends jsonIface[JsValue] {
def turnJsonIntoClass[T](t: JsValue) { t.as[T] }
}
但是这不会编译,因为作为[T]需要隐读[T]
所以我改写了我的iface like that:
trait jsonIface[JsValue] {
type metaInfo[T]
def turnJsonIntoClass[T](t: JsValue)(implicit meta: metaInfo[T])
}
玩JSON实现了一套看起来像这样:
import play.api.libs.json._
trait myPlayJsonImpl extends jsonIface[JsValue] {
type conv[M] = Reads[M]
def turnJsonIntoClass[T](t: JsValue)(implicit reads: Reads[T]) { t.as[T] }
}
和json4s看起来像这样:
import org.json4s.JsonAST._
trait json4sImpl extends jsonIface[JValue] {
type conv[M] = Manifest[M]
def turnJsonIntoClass[T](t: JsValue)(implicit reads: Manifest[T]) { t.extract[T] }
}
这编译但是当你开始使用类型级特性的工作,它看起来笨重