Scala中的有限泛型(如Java中的<e extends =“”myclass =“”>)</e>

时间:2011-10-17 10:50:57

标签: generics scala

我正在将应用程序从java迁移到Scala。 在java中我有类似

的东西
abstract class CommonObjectInfo{//...}
class ConcreteObject extends CommonObjectInfo{//...}

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

如何在Scala中正式表达“包装”对象?我

2 个答案:

答案 0 :(得分:9)

abstract class CommonObjectInfo
class ConcreteObject extends CommonObjectInfo

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

答案 1 :(得分:5)

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

abstract class CommonObjectInfo

class ConcreteObject extends CommonObjectInfo

abstract class AbstractWrapper{
 type objectInfo <: CommonObjectInfo
}

class ConcreteWrapper {
  type objectInfo = ConcreteObject 
}