Scala Case Class的Copy实现

7

我找不到scala中case class的复制实现方式。

我能以某种方式进行检查吗?

我原本认为Intellij可以指向实现,但它不想跳转,我不知道为什么 :/


7
它是由scalac生成的,看起来类似于https://dev59.com/gWw15IYBdhLWcg3wZq5r#6637597。要实际查看它,我认为您需要编译和反编译或在scalac中启用某些选项。 - Łukasz
1个回答

4
您可以使用 scalac -print ClassName.scala 来检查 Scala case class 的输出,因为 copy 实际上是由编译器生成的方法。
以下是一个示例:
case class Test(s: String, i: Int)

这是过滤噪音后针对copy的输出结果:
case class Test extends Object with Product with Serializable {
    private[this] val s: String = _;
    def s(): String = Test.this.s;

    private[this] val i: Int = _;
    def i(): Int = Test.this.i;

    def copy(s: String, i: Int): common.Test = new common.Test(s, i);
    def copy$default$1(): String = Test.this.s();
    def copy$default$2(): Int = Test.this.i();
}

这里的copy$default$1和copy$default$2有点奇怪。如果我执行Test("a",3).copy(i=5),我仍然不确定会调用什么。 - kpbochenek
这是被调用的内容:def copy(s: String, i: Int): common.Test = new common.Test(s, i); - Yuval Itzchakov
好的,它调用了一些我们看不到的类的方法 :-)) 最重要的是,它避免了反射吗? - matanster
2
@matanster 是的,它是在编译时生成的。 - Yuval Itzchakov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接