【发布时间】:2013-06-26 20:43:57
【问题描述】:
我有一个奇怪的问题,可能是因为我的类的结构有点复杂,但无论如何:
首先我有 2 个抽象类:TestAbstract1 和 TestAbstract2。
- TestAbstract2 采用扩展 TestAbstract1 的类型
- TestAbstract1 声明了一个名为 valTest、类型为 TestAbstract2[TestAbstract1] 的 val,必须在子类中实现
代码:
abstract class TestAbstract1 {
val valTest: TestAbstract2[TestAbstract1]
def meth1(): List[TestAbstract1] = {
valTest.meth2()
}
}
abstract class TestAbstract2[T <: TestAbstract1] {
def meth2(): List[T] = {
List()
}
}
然后我有一个扩展TestAbstract2的对象TestObject2,以及一个扩展TestAbstract1的基本类Test2,并且必须实现valTest:
class Test2 extends TestAbstract1 {
val valTest: TestAbstract2[Test2] = TestObject2
}
object TestObject2 extends TestAbstract2[Test2] { }
问题就在这里:当我编译时,它告诉我:
[error] 覆盖类型为 models.test.TestAbstract2[models.test.TestAbstract1] 的类 TestAbstract1 中的值 valTest;
[error] value valTest 的类型不兼容
[错误] val valTest: TestAbstract2[Test2] = TestObject2
我不知道我做错了什么,因为如果我考虑多态规则,应该没问题...
你有什么想法吗?或者甚至是做我想做的更好的方式?
谢谢!
【问题讨论】:
标签: scala generics inheritance scala-2.10