Scala:泛型隐式 class
Scala: Generic Implicit class
我正在尝试从 class 中获取类型 我正在隐式推断:
case class ToGet(key: String)
class Builder[T <: AnyRef] {
def get(key: String)(implicit mf: Manifest[T]): ToGet = {
ToGet(key)
}
}
object Builder {
import scala.reflect.runtime.universe._
implicit class ToGetImplicits(obj: ToGet) {
def future[T <: AnyRef]()(implicit mf: Manifest[T]): Future[Option[T]] = ???
}
}
当我创建一个实例并调用上面的 future 时,它 returns Future[Option[Nothing]]
。
是否可以在此处获取类型或设计该类型的好方法?
编辑
例如:
val obj = new Builder[String]
obj.get("myKey").future() //this returns a Future[Option[Nothing]]
编辑 2
添加了 ToGet 定义
obj.get("myKey")
returns一个ToGet
。此时,清单已提供并被忽略。我们现在只有 ToGet
.
现在 ToGet
上的 future
调用没有可以使用的类型信息,因此它推断 Nothing
.
根据代码的意图,您可能希望将清单作为隐式参数传递给 ToGet
class:
case class ToGet [T] (key: String)(implicit val mf: Manifest[T])
现在你的隐式 class:
implicit class ToGetImplicits[T](obj: ToGet[T]) {
def future(): Future[Option[T]] = {
// you can access obj.mf here for the manifest
???
}
}
问题是:某些东西 必须携带类型信息。
我正在尝试从 class 中获取类型 我正在隐式推断:
case class ToGet(key: String)
class Builder[T <: AnyRef] {
def get(key: String)(implicit mf: Manifest[T]): ToGet = {
ToGet(key)
}
}
object Builder {
import scala.reflect.runtime.universe._
implicit class ToGetImplicits(obj: ToGet) {
def future[T <: AnyRef]()(implicit mf: Manifest[T]): Future[Option[T]] = ???
}
}
当我创建一个实例并调用上面的 future 时,它 returns Future[Option[Nothing]]
。
是否可以在此处获取类型或设计该类型的好方法?
编辑
例如:
val obj = new Builder[String]
obj.get("myKey").future() //this returns a Future[Option[Nothing]]
编辑 2
添加了 ToGet 定义
obj.get("myKey")
returns一个ToGet
。此时,清单已提供并被忽略。我们现在只有 ToGet
.
现在 ToGet
上的 future
调用没有可以使用的类型信息,因此它推断 Nothing
.
根据代码的意图,您可能希望将清单作为隐式参数传递给 ToGet
class:
case class ToGet [T] (key: String)(implicit val mf: Manifest[T])
现在你的隐式 class:
implicit class ToGetImplicits[T](obj: ToGet[T]) {
def future(): Future[Option[T]] = {
// you can access obj.mf here for the manifest
???
}
}
问题是:某些东西 必须携带类型信息。