Scala中以下Java方法声明的等效内容是什么:
public <T> T readValue(java.lang.String s, java.lang.Class<T> tClass)
换句话说,我想声明一个采用类型为T的类的方法,并返回该类型的实例。
答案 0 :(得分:25)
我。非常接近你想要的:
def readValue[T:ClassTag](s:String):T = {
val tClass = implicitly[ClassTag[T]].runtimeClass
//implementation for different classes.
}
用法比Java更清晰:
val myDouble = readValue[Double]("1.0")
答案 1 :(得分:2)
II。另一个更复杂的方法是将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
}