我有这样的类型
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吗?
是的,因为伴侣对象可以访问其伴侣类的私有成员,所以你可以将主要(和辅助的,如果有的话)构造函数设为私有.伪代码在这里:
class ConcreteFoo private (n: Int) extends Foo(n)
Run Code Online (Sandbox Code Playgroud)