Scala抽象类中的私有构造函数?

托科拉

我知道不能实例化抽象类,所以也许我正在回答自己的问题,但是有没有办法将私有构造函数放在抽象类中?我的问题是我有一个抽象类,其中的两个子类具有完全相同的方法,并且某些方法以相同的方式完成,因此我想在抽象类中实现它们,但是它们返回该类的成员所以我想不出一种方法来返回我无法实例化的东西。我想返回this(x),但是我不知道如果没有抽象类具有构造函数,我是否可以。

abstract class Storage {
    def +(other: Storage) : Storage = {
        var d=List()
        for (i<-other.length){
             d=this.element(i)+other.element(i)
        }    
        this(d) 
    }
}

其中element在指定位置给出元素,而两个子类使用将List用作参数的构造函数。

j

您正在寻找的是在某些语言(例如Delphi)中称为“虚拟构造函数”的概念。Scala没有虚拟构造函数,但是您可以使用虚拟工厂方法部分模拟它们,这足以满足您的用例:

abstract class Storage {
  def newLikeThis(d: List[Elem]): Storage

  def +(other: Storage): Storage = {
    ...
    newLikeThis(d)
  }
}

class StorageA(d: List[Elem]) extends Storage {
  def newLikeThis(d: List[Elem]): StorageA =
    new StorageA(d)

  ...
}

// same for StorageB

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章