Scala 为什么我看到一个;类型模式中的抽象类型T。。。未选中,因为它是通过擦除消除的”;即使我有类型和类标签

Scala 为什么我看到一个;类型模式中的抽象类型T。。。未选中,因为它是通过擦除消除的”;即使我有类型和类标签,scala,type-erasure,Scala,Type Erasure,我有从地图中提取值的代码,我将其别名为: type CsvRow = Map[String, Any] 和提取等级: class CsvExtractor(row: CsvRow) extends Extractor { def get[T: TypeTag: ClassTag](k: String): T = getOption[T](k).get def getOption[T: TypeTag: ClassTag](k: String): Option[T] = { r

我有从地图中提取值的代码,我将其别名为:

type CsvRow = Map[String, Any]
和提取等级:

class CsvExtractor(row: CsvRow) extends Extractor {
  def get[T: TypeTag: ClassTag](k: String): T = getOption[T](k).get

  def getOption[T: TypeTag: ClassTag](k: String): Option[T] = {
    row(k) match {
      case v: Some[T] => v
      case None       => None
    }
  }
}
编译器向我发出以下警告:

[warn] /Users/axue/workspace/events/schema-kontrol/src/main/scala/com/lumoslabs/schemakontrol/core/extractor/CsvExtractor.scala:12: abstract type T in type pattern Some[T] is unchecked since it is eliminated by erasure
[warn]       case v: Some[T] => v
[warn]               ^

但是ClassTag和TypeTag不应该确保类型信息存在吗

这是因为您正在将其放入泛化类定义中。尝试更改为以下内容:

case Some(v: T) => v