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

时间:2015-02-21 18:13:57

标签: scala abstract-class

我知道抽象类无法实例化,所以也许我正在回答我自己的问题,但有没有办法将私有构造函数放在抽象类中?我的问题是我有一个带有两个子类的抽象类,它们具有完全相同的方法,并且一些方法以相同的方式完成,所以我想在抽象类中实现它们,但它们返回类的成员所以我想不出一种方法可以返回一些我无法实例化的东西。我想返回这个(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作为参数的构造函数。

1 个答案:

答案 0 :(得分:2)

您正在寻找的是一个名为&#34;虚拟构造函数&#34;在某些语言中,例如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