密封特征中的方法在 class 文件中给出了重复的字段名称和签名
Method in sealed trait gives Duplicate field name & signature in class file
当我在 IntList
上添加 process()
时,它给出了运行时间“Duplicate field name&signature in class file Cons...
”。仅当 sealed trait
在函数内部定义时才会发生这种情况。
scala> def t4() = {
|
| sealed trait IntList {
| def process (baseCase: Int, f: (Int, Int) => Int): Int =
| this match {
| case End => baseCase
| case Cons(hd, tl) => f( hd, tl.process(baseCase, f))
| }
|
| }
|
| final case object End extends IntList
|
| final case class Cons ( hd: Int, tl: IntList) extends IntList
|
| val l1: IntList = Cons(1, Cons(3, Cons(5, End)))
| }
t4: ()Unit
scala> t4()
java.lang.ClassFormatError: Duplicate field name&signature in class file Cons
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileC
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at Cons$.apply(<console>:24)
at .t4(<console>:26)
... 32 elided
证明是一个已知问题。在这里追踪:https://issues.scala-lang.org/browse/SI-5252
当我在 IntList
上添加 process()
时,它给出了运行时间“Duplicate field name&signature in class file Cons...
”。仅当 sealed trait
在函数内部定义时才会发生这种情况。
scala> def t4() = {
|
| sealed trait IntList {
| def process (baseCase: Int, f: (Int, Int) => Int): Int =
| this match {
| case End => baseCase
| case Cons(hd, tl) => f( hd, tl.process(baseCase, f))
| }
|
| }
|
| final case object End extends IntList
|
| final case class Cons ( hd: Int, tl: IntList) extends IntList
|
| val l1: IntList = Cons(1, Cons(3, Cons(5, End)))
| }
t4: ()Unit
scala> t4()
java.lang.ClassFormatError: Duplicate field name&signature in class file Cons
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileC
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at Cons$.apply(<console>:24)
at .t4(<console>:26)
... 32 elided
证明是一个已知问题。在这里追踪:https://issues.scala-lang.org/browse/SI-5252