Я работаю над проектом, который в основном требует множественного наследования в формальном смысле:Симуляция множественного наследования в Scala
class X
class Y
class XY extends X,Y
У меня есть два класса, которые имеют некоторые определения и используемые в коде, то есть:
def alpha(x: X)
def beta(y: Y)
Я хочу, чтобы динамически создать класс XY
, который просто объединяет все определения из X
и Y
, но по-прежнему сохраняет безопасность типов. Более конкретно, что ранее определенные alpha
и beta
по-прежнему принимают этот объединенный класс.
Я знаю, что Scala позволяет смешивать в чертах, например:
trait T
class A
val ta = new A with T
Это работает отлично.
Однако, я не могу сделать это с классами:
class X
class Y
val xy = new X with Y
Как with ..
должна быть черта.
Я попытался обойти это, выполнив следующие действия:
trait xV extends X
trait yV extends Y
val xy = new xV with yV
К сожалению, это не работает и выдает следующую ошибку:
Error:(33, 26) illegal inheritance; superclass X
is not a subclass of the superclass Y
of the mixin trait yV
val xy = new xV with yV
Любая помощь будет оценена.
Edit:
Чтобы уточнить, я не может изменить классы X
или Y
.
Это может быть очень полезно. Я отчитаю. Большое спасибо. – Crembo
Ну, похоже, это решение работает в некоторой степени ... Но есть ли способ сделать преобразование 'toX' более приоритетным, чем' toY'? – Crembo
Да, просто переместите 'toY' в свойство, которое' object XY' расширяет. –