限制构造函数访问

时间:2011-08-05 11:34:56

标签: oop scala

我有这样的类型

sealed class Foo[A](val value: A)

object Foo {
    def apply[A](v: A)(implicit num: Numeric[A]): Foo[A] =
      /* highly complex stuff to make a Foo[A] */

    implicit def toA[A](x: Foo[A]) = x.value
}

Foo作为一个类只应该保存该值,因此隐式数值没有多大意义。但我需要A的类型始终是数字。

所以我的想法就是不可能在其伴侣之外使用Foo的普通构造函数。这可能在Scala中吗?

1 个答案:

答案 0 :(得分:5)

是的,因为伴侣对象可以访问其伴侣类的私有成员,所以你可以将主(和辅助的,如果有的话)构造函数设为私有。 这里有伪代码:

class ConcreteFoo private (n: Int) extends Foo(n)