2011-10-17 11 views
7

Bir uygulamayı java'dan Scala'ya geçiriyorum. java olarak BenScala'da sınırlı generikler (Java'da <E extends MyClass>)

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

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

gibi somethng nasıl resmen Scala "sarmalayıcılarını" nesneleri ifade edebilir var? Ben

cevap

9
abstract class CommonObjectInfo 
class ConcreteObject extends CommonObjectInfo 

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

zamanki çözüm agilesteel gelen biridir, ama bazen (söz konusu tip bir uygulama detay olarak kabul edilir özellikle) sınıfında "içeride" tip bilgi çekmesi yararlı olacaktır:

abstract class CommonObjectInfo 

class ConcreteObject extends CommonObjectInfo 

abstract class AbstractWrapper{ 
type objectInfo <: CommonObjectInfo 
} 

class ConcreteWrapper { 
    type objectInfo = ConcreteObject 
}