我创建了一个扩展Project
Model
abstract class Model
case class Project(...) extends Model
和对象Table
扩展Base
:
abstract class Base {
val tableForm: Form[Model]
}
object Table extends Base {
val tableForm: Form[Project] = (...)
}
为什么它不能编译,我该如何解决? (“在类的基类中覆盖方法/值tableForm => Form [Model]”)
我只想强制Base
的所有子类都具有tableForm
属性。
答案 0 :(得分:4)
因为Form[Project]
不是Form[Model]
的子类。因此,编译器会在覆盖值时抱怨不兼容的类型。
Form[T]
是不变的。您可以阅读variance doc
要解决此问题,您可以将类型参数添加到Base
。
abstract class Base[M <: Model] {
val tableForm: Test[M]
}
object Table extends Base[Project] {
val tableForm: Test[Project] = ???
}