限制构造函数访问

Lan*_*nbo 3 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
}
Run Code Online (Sandbox Code Playgroud)

Foo因为一个类只应该保存该值,所以隐含的数字不会有多大意义.但我需要的类型A始终是数字.

所以我的想法是让它不可能Foo在其伴侣之外使用正常的构造函数.这可能在Scala吗?

agi*_*eel 5

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

class ConcreteFoo private (n: Int) extends Foo(n)
Run Code Online (Sandbox Code Playgroud)