Scala-什么是案例类私有

Scala-什么是案例类私有,scala,Scala,我正在分析我现有的项目,我发现了一些类似的(概念上): 在我创建了这两个类之后,我观察了它们之间的差异。我使用java反编译器分析了他们的java源代码。我没有发现任何不同 那里需要什么样的私人空间 这有什么重要性 case类是一个类,它通过几个helper函数自动定义一个伴生对象。其中之一是apply方法,它本质上允许在定义类时跳过“new”关键字。示例中的private关键字使用“new”关键字private构造新的AA。例如: case class A private(id: Int) c

我正在分析我现有的项目,我发现了一些类似的(概念上):

在我创建了这两个类之后,我观察了它们之间的差异。我使用java反编译器分析了他们的java源代码。我没有发现任何不同

那里需要什么样的私人空间

这有什么重要性


case类是一个类,它通过几个helper函数自动定义一个伴生对象。其中之一是apply方法,它本质上允许在定义类时跳过“new”关键字。示例中的private关键字使用“new”关键字private构造新的AA。例如:

case class A private(id: Int)
case class B(id: Int)
A(1) //Using public method
B(1) //Using public method
new A(1) // Using PRIVATE method
new B(1) // Using public method

使用Scala REPL可以更好地理解这一点

scala> case class A private(a: String)
defined class A

scala> new A("")
<console>:14: error: constructor A in class A cannot be accessed in object $iw
       new A("")
       ^

scala> A("")
res3: A = A()
scala>case class A private(A:String)
定义的A类
scala>新A(“”)
:14:错误:无法在对象$iw中访问类A中的构造函数A
新A(“”)
^
scala>A(“”)
res3:A=A()

请注意,
A
的实例化不能使用
new
关键字来完成
private
有助于使用
new
(使其私有化)

AA
具有私有构造函数或观察到AA、BB具有公共构造函数来限制实例。AA$,BB$有私有构造函数。我正在使用JD-GUI反编译器。一些Scala元数据无法从反编译代码中直接观察到。您可能需要解析类本身上的ScalaSig注释来发现差异。JD-GUI是Java的反编译器,它对Scala一无所知。您不能相信它所说的任何内容。很抱歉,我并没有得到,任何得到,您将创建一个实例。@Sun注意到,不能使用new关键字来实例化。private有助于使用new(使其成为private)@Sun来限制实例。。private阻止您使用
new
关键字创建对象。因此,通过设置private,我可以只创建
A
的一个实例吗?对吗?如果您再次调用
A()
,它将给出新实例或旧实例。@Sun它将给您一个新实例。
scala> case class A private(a: String)
defined class A

scala> new A("")
<console>:14: error: constructor A in class A cannot be accessed in object $iw
       new A("")
       ^

scala> A("")
res3: A = A()