如果我们了解由这种情况下的类编译生成的字节码
case class Person(name: String, age: Int)
除其他方法外,我们还得到了这种方法:
public scala.collection.Iterator<java.lang.String> productElementNames();
所以,问题是,它来自哪里,为什么不能在Person的实例上调用它,比如来自同一编译类的另一个实例
public scala.collection.Iterator<java.lang.Object> productIterator();
我使用以下版本:
$ scala -version
Scala code runner version 2.13.8 -- Copyright 2002-2021, LAMP/EPFL and Lightbend, Inc.
$ scalac -version
Scala compiler version 2.13.8 -- Copyright 2002-2021, LAMP/EPFL and Lightbend, Inc.
想法截图
已解决
感谢@DmytroMitin和@ElectronWill
是的,productElementNames()
是从Product
继承的方法。
它在Scala2.13.8中是绝对可调用的,使用它可以编译示例。
问题是,IDE认为它是Scala 2.12.4,而Product
还没有包含该方法。