今天我遇到了一个关于case类构造函数的奇怪问题。我想让一个构造函数私有化,但似乎这并不是问题。所以我在我的一个项目中尝试了一下,它可以工作。但在另一个项目中,我可以调用私有的构造函数,并且编译成功了。我以为是我的ide出了问题,所以我创建了一个独立的类并使用scalac进行了编译。结果也通过了。以下是代码:
package com.test
object Main {
def main(args: Array[String]) {
val bar = Bar("12345")
// bar.doStuff()
println(bar)
}
}
case class Bar private(foo: String){
private def doStuff():Unit = println("stuff")
}
有趣的是,如果我取消注释bar.doStuff(),它就无法编译。因此,我认为在这种情况下private是起作用的,但是对于构造函数却不起作用。我做错了什么? Scalac版本是2.11.8
case class
和object
来实现。例如:case class Person(name: String, age: String)
,并使用object Person { def build(name: String, age: Int): Option[Person] }
来创建 Person 对象。正如您所指出的,使用case class
可以提供“合理”的hashCode
和equals
实现,从而减轻开发人员的工作负担。 - Kevin Meredith