Estoy jugando con scala (scala 2.8). Supongamos que tengo una clase con un rasgo anidado, y quiero usar ese rasgo anidado como el tipo para un parámetro en el constructor de la clase. ¿Es eso posible? Esto es lo más cerca que he llegado:Rasgo anidado en el constructor de clase en scala
class OuterClass(traitParam:OuterClass#InnerTrait) {
trait InnerTrait { }
val y:InnerTrait = traitParam
}
Sin la tercera línea que incluso compila, pero tan pronto como trato de utilizar realmente el traitParam
como InnerTrait
consigo un error del compilador:
type mismatch; found: OuterClass#InnerTrait required: OuterClass.this.InnerTrait.
No puedo entender qué (si hay algo) podría hacer. Haciendo
class OuterClass(traitParam:OuterClass.this.InnerTrait)
en su lugar, como el mensaje de error podría sugerir, no se compila. ¿Tengo otra opción que no sea mover InnerTrait
fuera de OuterClass
? Si se pregunta por qué me gustaría hacer esto, la respuesta es que en mi código real, el equivalente a OuterClass
tiene parámetros de tipo que luego se usarían en InnerTrait
. Si lo muevo hacia afuera, entonces tengo que replantear los parámetros de tipo cada vez que hago referencia al rasgo interno.