抽象 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
我知道抽象 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