我有一个参数化的通用类型,其中泛型类型来自我单独定义的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
?
答案 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的子类型。