【发布时间】:2016-10-23 12:41:57
【问题描述】:
我有一个抽象类 Model 我从中创建案例类:
abstract class Model
case class User(.) extends Model
一个抽象类Table,将Model作为类型参数,用于其默认的具体方法之一:
abstract class Table[M <: Model] {
def parser = SomeExternalBuilder[M]
}
意思很简单:“根据自己的类,给Table的每个实例一个默认的parser”。
问题是SomeExternalBuilder 只会接受一个案例类作为参数("case class expected: M"),所以它不能编译。 p>
我可以让Table 仅将案例类作为类型参数吗?
我看到一些答案提供了一个缺少的copy 方法(ref1,ref2),所以我尝试了这个:
trait Model[T] {
def copy: T
}
abstract class Table[M <: Model[M]]
但是现在 case class User 扩展 Model[User] 并且必须覆盖 copy Table。
没有比在每个孩子身上复制def parser 行更好的方法吗?
编辑:N.B.真正的函数是来自 Play 的“异常”库的def parser: anorm.Macro.namedParser[M]。
【问题讨论】:
标签: scala