クラスの構造が少し複雑なためか、興味深い問題がありますが、とにかく:
まず、TestAbstract1 と TestAbstract2 の 2 つの抽象クラスがあります。
- TestAbstract2は TestAbstract1を拡張する型を取ります
- TestAbstract1は、子クラスで実装する必要があるタイプ TestAbstract2[TestAbstract1] の valTestという名前の 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 を拡張する 1 つのオブジェクトTestObject2と、TestAbstract1 を拡張する基本クラスTest2があり、 valTestを実装する必要があります。
class Test2 extends TestAbstract1 {
val valTest: TestAbstract2[Test2] = TestObject2
}
object TestObject2 extends TestAbstract2[Test2] { }
問題はここにあります:コンパイルすると、次のように表示されます:
[エラー] タイプ models.test.TestAbstract2[models.test.TestAbstract1] のクラス TestAbstract1 の値 valTest をオーバーライドしています。
[エラー] 値 valTest に互換性のない型があります
[エラー] val valTest: TestAbstract2[Test2] = TestObject2
ポリモーフィズムのルールを考えれば大丈夫なはずなので、何が間違っているのかわかりません...
何か考えはありますか?それとも、私がやりたいことを行うためのより良い方法でしょうか?
ありがとうございました !