2011-10-17 26 views
7

我正在將應用程序從java遷移到Scala。 在java中我有一個像Scala中有界的泛型(如<E在Java中擴展MyClass>)

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

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

somethng我怎樣才能表達正式的「包裝」對象Scala呢?我

回答

9
abstract class CommonObjectInfo 
class ConcreteObject extends CommonObjectInfo 

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

通常的解決辦法是從agilesteel一個,但有時它拉「內部」類(特別是當所討論的類型被認爲是實現的細節)的類型的信息是有用的:

abstract class CommonObjectInfo 

class ConcreteObject extends CommonObjectInfo 

abstract class AbstractWrapper{ 
type objectInfo <: CommonObjectInfo 
} 

class ConcreteWrapper { 
    type objectInfo = ConcreteObject 
}