Scala 如何实现单一工厂模式?
我希望有一些类型“ValidatedVals”,它可以由单个类专门实例化(即,它是ValidatedVals的单个工厂) 然后我想在许多其他类中引用这个ValidatedVals类型 私有构造函数似乎是一个答案。。。但是 下面的代码失败,因为(显然)一个内部类具有一个私有构造函数,在Scala 如何实现单一工厂模式?,scala,Scala,我希望有一些类型“ValidatedVals”,它可以由单个类专门实例化(即,它是ValidatedVals的单个工厂) 然后我想在许多其他类中引用这个ValidatedVals类型 私有构造函数似乎是一个答案。。。但是 下面的代码失败,因为(显然)一个内部类具有一个私有构造函数,在 object X{ ... } 使该构造函数在对象X中不可见 那么,在下面的代码中,我如何使其: 只有ValidatedValsFactory才能构造ValidatedVals对象 我可以在其他类中引用Val
object X{ ... }
使该构造函数在对象X中不可见
那么,在下面的代码中,我如何使其:
- 只有ValidatedValsFactory才能构造ValidatedVals对象
- 我可以在其他类中引用ValidatedVals类型吗
- 我不希望f的参数的类型是接口(因为通过实现接口很容易绕过验证)
- 我无法将类ValidatedVals移动到ValidatedValsFactory的类定义中,因为ValidatedValsConsumer需要能够引用内部类typename(因此ValidatedVals必须是静态声明)
嘎嘎 考虑将您的
ValidatedVals
类型声明为密封类或特征。此处有更多详细信息:考虑将您的ValidatedVals
类型声明为密封类或特征。此处有更多详细信息:考虑将您的ValidatedVals
类型声明为密封类或特征。此处有更多详细信息:考虑将您的ValidatedVals
类型声明为密封类或特征。此处有更多详细信息:如果将编译错误设置为对象的私有,则编译错误看起来会消失:
class ValidatedVals private[ValidatedValsFactory] (val a: Int, val b: Int) {}
如果将编译错误设置为对象私有,则编译错误似乎会消失:
class ValidatedVals private[ValidatedValsFactory] (val a: Int, val b: Int) {}
如果将编译错误设置为对象私有,则编译错误似乎会消失:
class ValidatedVals private[ValidatedValsFactory] (val a: Int, val b: Int) {}
如果将编译错误设置为对象私有,则编译错误似乎会消失:
class ValidatedVals private[ValidatedValsFactory] (val a: Int, val b: Int) {}
美好的还可以与Java共享该类。很好!还可以与Java共享该类。很好!还可以与Java共享该类。很好!还可以与Java共享该类。这只会阻止扩展,但不会控制实例化。我同意。“其他”答案更符合原始问题中所述的目标。这只会阻止扩展,但不会控制实例化。我同意。“其他”答案更符合原始问题中所述的目标。这只会阻止扩展,但不会控制实例化。我同意。“其他”答案更符合原始问题中所述的目标。这只会阻止扩展,但不会控制实例化。我同意。“其他”答案更符合原始问题中所述的目标。在Scala中,您将类
X
的工厂方法放置在X
的伴生对象中,而不是XFactory
。。。。这实际上取决于工厂是否包含state。在Scala中,将类X
的工厂方法放置在X
的伴随对象中,而不是XFactory
。。。。这实际上取决于工厂是否包含state。在Scala中,将类X
的工厂方法放置在X
的伴随对象中,而不是XFactory
。。。。这实际上取决于工厂是否包含state。在Scala中,将类X
的工厂方法放置在X
的伴随对象中,而不是XFactory
。。。。那真的取决于你们的工厂是否有州政府。