我找到了一些片段如下:
import org.json4s.DefaultFormats
import org.json4s.jackson.JsonMethods._
import scala.io.Source
import scala.reflect.ClassTag
class ConfigLoader[C: ClassTag : Manifest](filePath: String) {
def loadFromFile(): C = {
implicit val formats = DefaultFormats
parse(Source.fromFile(filePath).mkString, false).extract[C]
}
}
像C: ClassTag : Manifest
这样的泛型类型是什么意思?
语法C: ClassTag
是(implicit ct: ClassTag[C])
的简写。
即类构造函数的完整形式是
class ConfigLoader[C](filePath: String)(implicit ct: ClassTag[C], m: Manifest[C]) { ... }
实际上,这意味着在ConfigLoader
的定义中,需要ClassTag[C]
和Manifest[C]
的实例,因此它们必须作为参数提供给构造函数。