Scala中的有界泛型(在Java中<E extends MyClass>)

Jay*_*Zee 7 generics scala

我正在将应用程序从java迁移到Scala.在java中我有点喜欢

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

abstract class AbstractWrapper<E extends CommonObjectInfo>{//...} 
class ConcreteWrapper extends CommonObjectInfo<ConcreteObject>{//...} 
Run Code Online (Sandbox Code Playgroud)

我如何正式表达Scala中的"包装器"对象?一世

agi*_*eel 9

abstract class CommonObjectInfo
class ConcreteObject extends CommonObjectInfo

abstract class AbstractWrapper[E <: CommonObjectInfo]
class ConcreteWrapper extends AbstractWrapper[ConcreteObject]
Run Code Online (Sandbox Code Playgroud)


Lan*_*dei 5

通常的解决方案是来自agilesteel的解决方案,但有时将类型信息"拉入"类内部是有用的(特别是当有问题的类型被认为是实现细节时):

abstract class CommonObjectInfo

class ConcreteObject extends CommonObjectInfo

abstract class AbstractWrapper{
 type objectInfo <: CommonObjectInfo
}

class ConcreteWrapper {
  type objectInfo = ConcreteObject 
}
Run Code Online (Sandbox Code Playgroud)