Estoy buscando una forma de definir un método que devuelva un tipo T donde T = el tipo de la subclase.Tipo abstracto de Scala que representa el tipo de subclase
Sé que podría hacer esto usando tipos abstractos, pero no me gusta la sobrecarga de tener que redefinir T para cada subclase.
un código de ejemplo:
object Helper {
def help[A <: MyClass](cls: A): Option[A] = { cls.foo() map { _.asInstanceOf[A] } }
}
class MyClass {
type T <: MyClass
def foo(): Option[T] = Some(this.asInstanceOf[T])
}
class ChildClass extends MyClass {
type T = ChildClass
}
Posiblemente una nueva característica del lenguaje ha hecho esto más fácil? ¿O puedo usar this.type de alguna manera? Para mí es importante poder definir una clase de ayuda que pueda llamar a foo de esta manera.
Hay alguna posibilidad me puede indicar alguna sintaxis específica que funcionaría dado que necesito escribir Helper.help exactamente como está (con el parámetro tipo)? this.type no coincide con A? Además, tenga en cuenta que debo devolver Option [this.type] y def foo: Option [this.type] = Some (this) no parece compilarse. ¡Gracias por tu ayuda! –
@Pandora Los tipos de Singleton nunca se deducen, debe especificarlo explícitamente: 'Some [this.type] (this)'. –
¡Muchas gracias! Me encontré con otro problema ya que mi función foo en la práctica llama al método estático de otro objeto -> pregunta de seguimiento aquí si tiene ideas :) http://stackoverflow.com/questions/6886182/scala-this- type-conformity-to-type-parameter-bounds-of-supertype –