什么是此参数类型_>:在Scala中使用<:

时间:2018-04-16 18:17:42

标签: scala generics methods

我有一个参数化的通用类型,其中泛型类型来自我单独定义的Case类。

这些是

case class TypeA(user_id: String,
                   device_id: String) extends Serializable


case class TypeB(user_id: String,
                   device_id: String,
                   org_id: String,
                   app_name: String) extends Serializable

我使用Map函数根据Generic类型模式读入数据集

val res = this.readHandlersMap.map(s => s._1 match {

case "a" => {
  (s._1, s._2.read[TypeA]((Encoders.product[TypeA].schema)).asInstanceOf[Dataset[TypeA]])
}

case "b" => {
   (s._1, s._2.read[TypeB]((Encoders.product[TypeB].schema)).asInstanceOf[Dataset[TypeB]])    
}
});

检查res的输出后,我得到它的类型为

Map[String, Dataset[_ >: TypeA with TypeB <: Serializable with Product]]

我不明白这种意思。 _>:with在这种类型中做了什么?当我尝试将res声明为Dataset[Serializable]类型时,我收到错误消息。如果我添加TypeC

,这种类型会是什么?

1 个答案:

答案 0 :(得分:2)

这些基本上是定义的泛型类型的上限和下限:

例如:

Car <: Vehicle //it means car is subtype of vehicle 
Fruit >: Mango //fruit is super type of the mango

这意味着我们可以将汽车实例放在车辆堆栈上。还有一堆芒果果实。

Map[String, Dataset[_ >: TypeA with TypeB <: Serializable with Product]]

此行表示数据集的类型为where。  _是TypeA的超类型,TypeB是Serializable的子类型。