Расширяемый класс должен быть известен во время компиляции, а параметр типа, как правило, - нет. Следовательно, это невозможно сделать.
Однако, если вы пытаетесь расширить X
, чтобы извлечь выгоду из реализаций методов, определенных в признаке интерфейса A
, тогда вы можете добавить X
при создании экземпляра класса.
new D with X
Если вы хотите сохранить функции 'case class' D
, тогда используйте D
в качестве прокси, который перенаправляет вызовы методов, определенных в A
, в параметр arg1
типа X
это одно решение.
trait A {
def foo
}
case class D[X <: A](arg1: X) extends A {
def forw = arg1
def foo = forw.foo
}