我有两个相关的特征。 Dao将被用作一个类,DaoHelper将被Dao的伴侣使用。我想特质Dao能够使用DaoHelper中定义的函数,我唯一可以弄清楚如何做到这一点的方法是将伴随特征定义为val。然而不知何故,伴侣期望它的类型为D.this.T,我认为我已将其定义为Doa的子类型。我在这里很困惑。我为新问题道歉,我来自动态语言背景。
/test2.scala:14:覆盖类型为Test.DaoHelper [D.this.T]的Trait Dao中的值伴侣; [error] value companion具有不兼容的类型 [错误] val companion = D
object Test extends App {
trait Dao {
type T <: Dao
val companion: DaoHelper[T]
def getHelpfulData = companion.help
}
trait DaoHelper[Dao] {
val help = "Some helpful data"
}
class D extends Dao {
val companion = D
}
object D extends DaoHelper[D]
}
答案 0 :(得分:2)
companion
的类型为DaoHelper [T],但在D中没有指定T,那么编译器如何知道它应该是D类中的D?您可以通过在D中覆盖它来修复它。
class D extends Dao {
type T = D
val companion = D
}
答案 1 :(得分:0)
我不太明白您尝试使用class D
做什么,但是您收到此错误是因为您要在D
中将companion
分配给class D
,但是companion
的{{1}}中定义的类型为DaoHelper[T]
。由于Dao
的类型为D
且Dao
不是Dao
的子类型,因此无效。