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

Private constructor in abstract class Scala?

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

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

其中element给出了指定位置的元素,两个subclass使用了以List为参数的构造函数。

您要查找的是在某些语言中名为 "virtual constructor" 的概念,例如 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