Scala 中以下 Java 方法声明的等价物是什么:
public <T> T readValue(java.lang.String s, java.lang.Class<T> tClass)
换句话说,我想声明一个方法,它接受一个类型为 T 的类,并返回该类型的一个实例。
一、非常接近你想要的:
def readValue[T:ClassTag](s:String):T = {
val tClass = implicitly[ClassTag[T]].runtimeClass
//implementation for different classes.
}
用法比 Java 更清晰一些:
val myDouble = readValue[Double]("1.0")
二、另一种更复杂的方法是将 readValue 的实现外部化到一些用户提供的对象(类型类):
trait ValueReader[T] {
def readValue(s: String): T
}
def readValue[T: ValueReader](s: String): T = {
val reader = implicitly[ValueReader[T]]
reader.readValue(s)
}
implicit val doubleReader = new ValueReader[Double] {
def readValue(s:String) = // implementation for Double
}