我在正确理解类及其伴随对象的使用方面存在问题。
定义一个case类时,它附带了它的伴随对象,但是定义一个与case类同名的对象的结果是什么?它是否覆盖了伴侣对象?以及如何访问案例类参数?
例如,在TestCaseClass.scala文件中,我定义了以下内容:
case class TestCaseClass(att1: String, att2: Int, att4s: List[String])
object TestCaseClass {
def iWantDoSomethingWithMyParams: String = {
att1 + " " + att2
}
// Other functions
}
object AnotherTestCaseClass {
def iWantDoSomethingWithTestCaseClassParams: String = {
// How to access TestCaseClass.att1
TestCaseClass.att1 + " " + TestCaseClass.att2
}
def iWantGetAllAttr4: List[String] = {
// ???
}
}
在某种程度上,给object
与class
(或trait
)同名只是一个惯例问题。但它也有一些特殊的含义。
伴随对象是一个单独的类,就像任何其他对象一样。如果您希望伴随对象中的方法与类的实例进行交互,则必须像在任何其他情况下一样传递该类的实例。所以,要修复你的第一个例子:
case class TestCaseClass(att1: String, att2: Int, att4s: List[String])
object TestCaseClass {
def iWantDoSomethingWithMyParams(x: TestCaseClass): String =
x.att1 + " " + x.att2
}
类和对象不会以任何方式“覆盖”或踩到彼此的脚趾,因为类和对象属于不同的命名空间。类名称在类型级别(以及构造函数调用)中使用,对象名称在术语级别使用。
类及其伴侣之间存在一些关系:
private
成员对该对象可见,反之亦然。case class
实际上是一种速记,除了定义一个类之外,还将apply
和unapply
方法添加到其伴随对象中。