Scala - 什么是案例类私有

时间:2016-10-25 07:09:03

标签: scala

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

case class AA private(id: String) {}

case class BB(id: String) {}

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

  

私人需要什么?

     

这有什么重要性。

2 个答案:

答案 0 :(得分:5)

case类是一个类,它使用一些辅助函数自动定义Companion对象。其中一个是apply方法,它基本上允许在定义类时跳过'new'关键字。您的示例中的private关键字使用'new'关键字private来构建新的AA。例如:

observerLocator

答案 1 :(得分:3)

使用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()

请注意,使用A关键字无法实现new的实例化。 private使用new帮助限制A的实例化(将其设为私有)