У меня есть следующий фрагмент кода:Scala: незаконное наследование; selftype Foo [T] не соответствует Foo [T] s selftype T
abstract class Foo[T <: Foo[T]] { self: T =>
def bar(x: T): T
def newFoo: Foo[T] = {
new Foo[T] { self: T =>
// ...
}
}
}
У меня есть необходимость создания нового экземпляра Foo в методе моего абстрактного класса. Может ли кто-нибудь посоветовать мне, как лучше подойти к этому?
Спасибо, Адил
Ну, вы уже знаете класс T, даже без каких-либо меток классов, и это происходит именно из-за self-type: self имеет тип T, поэтому с self.getClass вы получаете класс, который хотите. – dth
Правда, но это не поможет вам, если у него есть параметры конструктора. –
Нет, действительно. Вы можете, конечно, также получить другие конструкторы таким образом, но тогда остается вопрос, откуда вы получите аргументы. – dth