Je l'extrait de code de code suivant:Scala: héritage illégal; selftype Foo [T] ne se conforme pas à selftype de Foo [T] T
abstract class Foo[T <: Foo[T]] { self: T =>
def bar(x: T): T
def newFoo: Foo[T] = {
new Foo[T] { self: T =>
// ...
}
}
}
J'ai besoin de générer une nouvelle instance de Foo dans une méthode de ma classe abstraite. Quelqu'un peut-il me conseiller sur la meilleure façon d'aborder cela?
Merci, Hadil
Eh bien, vous connaissez déjà la classe de T même sans balises de classe, et c'est exactement à cause du self-type: self a le type T donc avec self.getClass vous obtenez la classe que vous voulez. – dth
Vrai, mais cela ne vous servira à rien s'il a des paramètres constructeur. –
Non, en effet. Vous pouvez bien entendu aussi obtenir les autres constructeurs de cette façon, mais la question demeure, d'où vous obtiendriez les arguments. – dth