在Scala中定义泛型类时,如何确保类型参数' A'必须是一个案例类?
class TypedCollection[A](name: String){}
上下文:
我试图定义一个通用的' TypedCollection' wrapper类用于交互响应式JSONCollection,就好像它是一个case类的集合(类似于关系数据库的Typesafe Slick)。
原因' A'必须是一个案例类,所以它会自动被给予一个“不适用”的案例。方法。在为类型' A'创建隐式转换时,此方法用于泛型类中。到JsObject或BSONObject,所以它可以存储在MongoDB中。即。
implicit val AWrites = Json.writes[A]
implicit val AReads = Json.reads[A]
答案 0 :(得分:1)
所有案例类(以及元组)中最具体的直接祖先是产品。在scaladoc中没有直接提到它总是为其后代提供带有 unapply 的伴随对象,但实际上所有子类(case类和元组)都遵循这个约定。因此,您可以在类型参数上定义绑定,如下所示:
class TypedCollection[A <: Product](name: String){}