【问题标题】:bounded generics in Scala (as <E extends MyClass> in Java )Scala 中的有界泛型(如 <E extends MyClass> in Java )
【发布时间】:2011-10-17 10:50:56
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: generics scala


    【解决方案1】:
    abstract class CommonObjectInfo
    class ConcreteObject extends CommonObjectInfo
    
    abstract class AbstractWrapper[E <: CommonObjectInfo]
    class ConcreteWrapper extends AbstractWrapper[ConcreteObject]
    

    【讨论】:

      【解决方案2】:

      通常的解决方案是来自 Agilesteel 的解决方案,但有时将类型信息提取到类“内部”会很有用(尤其是当所讨论的类型被视为实现细节时):

      abstract class CommonObjectInfo
      
      class ConcreteObject extends CommonObjectInfo
      
      abstract class AbstractWrapper{
       type objectInfo <: CommonObjectInfo
      }
      
      class ConcreteWrapper {
        type objectInfo = ConcreteObject 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-13
        • 2015-12-31
        • 2014-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多