Gram z scala (scala 2.8). Załóżmy, że mam klasę z zagnieżdżoną cechą i chcę użyć tej zagnieżdżonej cechy jako typu dla parametru w konstruktorze klasy. Czy to w ogóle jest możliwe? Jest to najbliżej Doszedłem:Zagnieżdżona cecha w konstruktorze klasy w scala
class OuterClass(traitParam:OuterClass#InnerTrait) {
trait InnerTrait { }
val y:InnerTrait = traitParam
}
Bez trzeciej linii, że nawet kompiluje, ale jak tylko próbuję faktycznie używać traitParam
jako InnerTrait
pojawia się błąd kompilatora:
type mismatch; found: OuterClass#InnerTrait required: OuterClass.this.InnerTrait.
Nie mogę dowiedzieć się, co (jeśli w ogóle) mógłbym zrobić. Wykonanie
class OuterClass(traitParam:OuterClass.this.InnerTrait)
zamiast tego, jak może sugerować komunikat o błędzie, nie jest kompilowane. Czy mam inny wybór niż przeniesienie InnerTrait
poza domenę OuterClass
? Jeśli zastanawiasz się, dlaczego chciałbym to zrobić, odpowiedź brzmi, że w moim rzeczywistym kodzie, odpowiednik OuterClass
ma parametry typu, które następnie będą używane w InnerTrait
. Jeśli wyprowadzę go na zewnątrz, to muszę powtórzyć parametry typu za każdym razem, gdy odwołuję się do wewnętrznej cechy.