У меня есть две взаимосвязанные черты характера. Dao будет использоваться как класс, а DaoHelper будет использоваться объектом-компаньоном Dao. Я бы хотел, чтобы черта Dao могла использовать функции, определенные в DaoHelper, единственный способ выяснить, как это сделать, - это определить черту companion как val. Однако каким-то образом компаньон ожидает, что его типом будет D.this.T, который, как я думал, я определил как подтип Doa. Я здесь запутался. Приношу свои извинения за новый вопрос, я исхожу из динамического языкового фона.
/test2.scala:14: переопределение сопутствующего значения в характеристике Dao типа Test.DaoHelper [D.this.T]; [error] value companion имеет несовместимый тип [error] 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]
}