这个问题已经在这里有一个答案:
- 如何检查构造函数的参数,并抛出一个异常,或者使断言在斯卡拉默认构造函数? 2个回答
假设我在斯卡拉定义了以下类:
class ClassA(val n: Int) {
...
}
我想这个类的实例限制为只有那些有n个 5至10之间使用工厂模式。 例如,如果我写的东西,如:
val a = new ClassA(11)
这就提出了相应的错误消息的异常,或至少它返回null或东西。 我怎样才能实现这种行为?
更新:
这是可能在java实现这一带工厂模式 。
UPDATE2:
这个问题似乎是回答在这里 ,虽然,特别是有一个详细的称号。 我调整标题和内容保存被删除的问题,有两个原因:1)在这一个例子是简洁的,2)@克里斯·马丁提供的答案简单解释的方式工厂模式可以在Scala中通过使用达到同伴对象。
写Scala中的一个工厂的传统方法是定义一个apply
的同伴对象上的方法。
下面是使用的例子Either
(因为null
是从未/很少在斯卡拉使用,例外的是丑陋的):
class A private (n: Int) {
override def toString = s"A($n)"
}
object A {
def apply(n: Int): Either[String, A] =
if (n < 5) Left("Too small")
else if (n > 10) Left("Too large")
else Right(new A(n))
}
A(4) // Left(Too small)
A(5) // Right(A(5))
A(11) // Left(Too large)
这是基本一样的,你所引用的Java示例。 在A
构造函数是私有的,所以类只能通过工厂方法实例化。
文章来源: Preventing a class instantiation in Scala using Factory Pattern [duplicate]