小编Zar*_*s13的帖子

Scala:泛型和变量继承问题

我有一个奇怪的问题,也许是因为我的课程结构有点复杂,但无论如何:

首先,我有2个抽象类:TestAbstract1和TestAbstract2.

  • TestAbstract2采用扩展TestAbstract1的类型
  • TestAbstract1声明一个名为valTest的val ,其类型为TestAbstract2 [TestAbstract1],必须在子类中实现

代码:

abstract class TestAbstract1 {
    val valTest: TestAbstract2[TestAbstract1]

    def meth1(): List[TestAbstract1] = {
        valTest.meth2()
    }
}

abstract class TestAbstract2[T <: TestAbstract1] {
    def meth2(): List[T] = {
        List()
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个扩展TestAbstract2的对象TestObject2,以及扩展TestAbstract1的基本类Test2,并且必须实现valTest:

class Test2 extends TestAbstract1 {
    val valTest: TestAbstract2[Test2] = TestObject2
}

object TestObject2 extends TestAbstract2[Test2] { }
Run Code Online (Sandbox Code Playgroud)

问题在于:当我编译时,它告诉我:

[error]覆盖类型为models.test.TestAbstract2 [models.test.TestAbstract1]的类TestAbstract1中的值valTest;

[error] value valTest具有不兼容的类型

[error] val valTest:TestAbstract2 [Test2] = TestObject2

我不知道我做错了什么,因为如果我考虑多态性规则,它应该没问题......

你有什么主意吗 ?或者甚至可能更好地做我想做的事情?

谢谢 …

generics inheritance scala scala-2.10

1
推荐指数
1
解决办法
2540
查看次数

标签 统计

generics ×1

inheritance ×1

scala ×1

scala-2.10 ×1