Scala Case类方法:`public scala.ciggtion.Iterator< java.lang.String>ProductElementNames()`

y3bcpkx1  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(138)

如果我们研究一下这种情况下类编译产生的字节码

case class Person(name: String, age: Int)

除了其他方法外,我们还得到了这个方法:

public scala.collection.Iterator<java.lang.String> productElementNames();

所以,问题是,它从哪里来,为什么不能在一个人的示例上调用它,比如来自同一编译类的另一个示例

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.

idea screenshot

relj7zay

relj7zay1#

已解决
感谢@DmytroMitin和@ElectronWill
是的,productElementNames()是从Product继承的方法。
在编译样例时使用的Scala 2.13.8中,它绝对是可调用的。
问题是,IDE认为它是Scala 2.12.4,其中Product还不包含该方法。

相关问题