2011-10-17 5 views
7

Estoy migrando una aplicación de Java a Scala. en Java tengo somethng comogenéricos acotados en Scala (como <E amplía MyClass> en Java)

abstract class CommonObjectInfo{//...} 
class ConcreteObject extends CommonObjectInfo{//...} 

abstract class AbstractWrapper<E extends CommonObjectInfo>{//...} 
class ConcreteWrapper extends CommonObjectInfo<ConcreteObject>{//...} 

¿Cómo puedo expresar formalmente los "envoltorios" objetos en Scala? Me

Respuesta

9
abstract class CommonObjectInfo 
class ConcreteObject extends CommonObjectInfo 

abstract class AbstractWrapper[E <: CommonObjectInfo] 
class ConcreteWrapper extends AbstractWrapper[ConcreteObject] 
5

La solución habitual es el de agilesteel, pero a veces es útil para extraer la información de tipo "dentro" de la clase (especialmente cuando el tipo en cuestión se considera que es un detalle de implementación):

abstract class CommonObjectInfo 

class ConcreteObject extends CommonObjectInfo 

abstract class AbstractWrapper{ 
type objectInfo <: CommonObjectInfo 
} 

class ConcreteWrapper { 
    type objectInfo = ConcreteObject 
} 
Cuestiones relacionadas