【问题标题】:What is the meaning of a generic type like "C: ClassTag : Manifest"?像“C:ClassTag:Manifest”这样的泛型类型是什么意思?
【发布时间】:2025-12-07 22:05:03
【问题描述】:

我发现了一些sn-ps如下:

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 这样的泛型类型是什么意思?

【问题讨论】:

标签: scala implicit generic-programming context-bound classtag


【解决方案1】:

语法C: ClassTag(implicit ct: ClassTag[C]) 的简写。

即类构造函数的完整形式是

class ConfigLoader[C](filePath: String)(implicit ct: ClassTag[C], m: Manifest[C]) { ... }

实际上,这意味着在ConfigLoader 的定义中,ClassTag[C]Manifest[C] 的实例是必需的,因此必须将它们作为参数提供给构造函数。

【讨论】: