我定义了以下函数:
import org.apache.spark.sql.catalyst.{ScalaReflection}
import ScalaReflection.universe
import universe.TypeTag
def scalaTypesFor(dataType: DataType): Set[TypeTag[_]] = ...
def scalaTypeOpt: Option[TypeTag[_]] = ...
val catalystType = ...
scalaTypeOpt.map(v => Set(v))
.getOrElse{
val default = scalaTypesFor(catalystType)
default
}
在这种情况下, scalaTypesFor 和 scalaTypeOpt 都应该产生一个带有通配符参数的 TypeTag,它们应该是相同的类型。但是,编译器给了我以下错误:
Error:(29, 51) inferred type arguments [scala.collection.immutable.Set[_117] forSome { type _$2; type _117 >: org.apache.spark.sql.catalyst.ScalaReflection.universe.TypeTag[_$2] <: org.apache.spark.sql.catalyst.ScalaReflection.universe.TypeTag[_] }] do not conform to method getOrElse's type parameter bounds [B >: scala.collection.immutable.Set[org.apache.spark.sql.catalyst.ScalaReflection.universe.TypeTag[_$2]] forSome { type _$2 }]
val effective = scalaTypeOpt.map(v => Set(v)).getOrElse{
^
类型推断有什么问题以及如何解决?