ejemplo:Cómo crear una instancia del tipo representado por el parámetro de tipo de Scala
import scala.actors._
import Actor._
class BalanceActor[T <: Actor] extends Actor {
val workers: Int = 10
private lazy val actors = new Array[T](workers)
override def start() = {
for (i <- 0 to (workers - 1)) {
// error below: classtype required but T found
actors(i) = new T
actors(i).start
}
super.start()
}
// error below: method mailboxSize cannot be accessed in T
def workerMailboxSizes: List[Int] = (actors map (_.mailboxSize)).toList
.
.
.
Nota el segundo error demuestra que conoce los elementos de actores son s "T", pero no que la "T" es una subclase de actor, como está restringida en la definición genérica de clase.
¿Cómo se puede corregir este código para que funcione (usando Scala 2.8)?
... se me olvidó mencionar, estoy usando el plugin Eclipse Scala (2.8 cada noche) para esto ... –
Todavía aparece el error en "método mailboxSize no se puede acceder en T", a pesar de usar el fac () funtion pass-in como sugirió. Estoy sorprendido por este resultado, ya que el compilador sabe que T is <: Actor, y que Actor tiene .mailboxSize (se accede dentro de la misma clase BalanceActor, como se muestra). Me pregunto si esto es un error en la versión en particular de 2.8 cada noche que estoy usando ??? ¿No debería compilarse el acceso a .mailboxSize, como usted mismo indicó? ¿Tienes algo similar para trabajar, tal vez en el complemento 2.7.5.final de Eclipse, o compilación de scalac independiente? –
Gracias tanto a oxbow_lakes como a Walter Chang por proporcionar soluciones diferentes, pero ambas viables, para el problema de creación de instancias. –