10

Scala 中以下 Java 方法声明的等价物是什么:

public <T>  T readValue(java.lang.String s, java.lang.Class<T> tClass)

换句话说,我想声明一个方法,它接受一个类型为 T 的类,并返回该类型的一个实例。

4

2 回答 2

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")
    
于 2013-09-07T19:55:54.297 回答
2
  • 二、另一种更复杂的方法是将 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
    }
    
于 2013-09-07T20:01:27.713 回答