2011-03-17 15 views
5

Actualmente estoy aprendiendo scala.
Por qué este código no funciona:Genéricos de Scala: ¿por qué no puedo crear objetos parametrizados dentro de la clase genérica?

class GenClass[T](var d : T) { 
    var elems: List[T] = Nil 
    def dosom(x: T) = { 
    var y = new T() 
    y 
    } 
} 

me sale: error: tipo de clase necesaria pero T encontró
en lugar de var y - nueva T()

Es porque borra el tipo de Java? ¿Hay alguna manera de resolver esto? ¿Crear una variable de tipo T dentro de la función genérica?

+2

Yup. Es una restricción de las raíces de Java. Usualmente uso una "función de constructor" (aprobada como argumento ctor, por ejemplo), p. '() => T', pero puede haber formas mucho más ingeniosas. –

+0

Sí - para mí esta solución parece suficiente y simple. –

+0

posible duplicado de [Cómo instanciar una instancia del tipo representado por el parámetro de tipo en Scala] (http://stackoverflow.com/questions/1305563/how-to-instantiate-an-instance-of-type-represented-by- type-parameter-in-scala) –

Respuesta

2

Porque no se puede estar seguro de que siempre hay un público, constructor sin parámetros.

+0

Eso también +1. Pero en el caso general hay una forma conocida de saber * qué * es el tipo de tiempo de ejecución de T. Scala 2.8 presenta una solución Manifiesto "general" para esta parte del problema. –

+0

Incluso si tiene el manifiesto, no necesariamente hay un constructor con una firma determinada, o cualquiera; 'T' podría ser un rasgo! – Raphael

+0

Sí, pero la idea detrás de la programación genérica es no resolver todo (p. Ej .: tipo de consistencia). Por ejemplo, en C++ podemos simplemente hacer todo con plantillas. –

Cuestiones relacionadas