我想要一些类型' ValidatedVals'可以由一个类专门实例化(即它是ValidatedVals的单一工厂)。
然后我想在许多其他类中引用此ValidatedVals类型。
私人建筑师似乎只是一个答案......但是......
下面的代码失败,因为(显然)是一个带有私有构造函数的内部类,在
中声明object X{ ... }
使得构造函数在对象X
中不可见所以,在下面的代码中,我该如何做到:
_
class ValidatedValsFactory {}
object ValidatedValsFactory {
class ValidatedVals private (val a: Int, val b: Int) {}
def validate(a: Int, b: Int): Unit = { /* .... */ }
def makeValidated(a: Int, b: Int): ValidatedVals = {
validate(a, b);
// **** Nope. Fail. Not visible. *****
return new ValidatedVals(a, b)
}
}
class ValidatedValsConsumer {
def f(param: ValidatedValsFactory.ValidatedVals): Unit = { /* ... */ }
}
garrghh!
答案 0 :(得分:2)
如果您将对象设为私有对象,则看起来编译错误会消失:
class ValidatedVals private[ValidatedValsFactory] (val a: Int, val b: Int) {}
答案 1 :(得分:1)
考虑将您的ValidatedVals
类型声明为密封类或特征。更多详情:What is a sealed trait?