假设我有一个集转换为字符串的,作为一个Type类:获得运行时类型拿起隐式证据
import scala.reflect.runtime.universe._
abstract class ToStringConverter[T] {
def convert(value: T): String
}
implicit object IntToStringConverter extends ToStringConverter[Int] {
def convert(value: Int) = value.toString
}
implicit object DoubleStringConverter extends ToStringConverter[Double] {
def convert(value: Double) = value.toString
}
和使用该类型的信息挑选合适的转换器转换方法:
def convert[T](v: T)(implicit ev: ToStringConverter[T]): String = ev.convert(v)
这工作得很好。如果我有具体类型提前,例如:
scala> convert[Double](12.2)
res0: String = 12.2
scala> convert[Int](12)
res1: String = 12
是否有可能使用上面的转换方法和运行时类型,例如,类型't'在下面?
scala> val t = typeOf[Double]
t: reflect.runtime.universe.Type = Double
你的'convert'需要一个值作为参数 - 你想用't'做什么?如果你想调用'convert(t)',你可以很容易地提供'隐式对象RTUStringConverter extends ToStringConverter [runtime.universe.Type]'。 – Suma
convert方法当前需要一个类型参数,并且此类型用于通过隐式机制将正确的转换器引入到范围中。 有时我不知道类型提前,我只有一个代表它的类型,所以我应该更改签名传入Type实例,并手动获取该类型的隐式转换器? – gnf
你想以类似'val a:Any; convert [t](a)'的方式调用它? – Suma