Why not give a compilation error?

I have below code snippet

object SubClass extends MyTrait { private[this] val a = 10 def main(args: Array[String]) { println(a) } } trait MyTrait { protected val a = 5 } 

And it gives the following runtime error. Can someone explain why we did not catch it at compile time.

Exception in the main thread java.lang.ClassFormatError: Duplicate field name & signature in the class file SubClass $ at java.lang.ClassLoader.defineClass1 (native method) with java.lang.ClassLoader.defineClassCond (ClassLoader.java:631) in java.lang.ClassLoader.defineClass (ClassLoader.java:615) in java.security.SecureClassLoader.defineClass (SecureClassLoader.java:141) on java.net.URLClassLoader.defineClass (URLClassLoader.java:283) in java.net.LC .access $ 000 (URLClassLoader.java:58) in java.net.URLClassLoader $ 1.run (URLClassLoader.java:197) in java.security.AccessController.doPrivileged (native method) in java.net.URLClassLoader.findClass (URLClassLoader.java : 190) in java.lang.ClassLoader.loadClass (ClassLoader.java.306) in sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.javahaps01) at java.lang.ClassLoader.loadClass (ClassLoader.java:247) in SubClass.main (TraitTest.scala)

+4
source share
1 answer

Because the software has errors?

https://issues.scala-lang.org/browse/SI-7475

That would be my guess.

The associated ticket received last attention:

https://issues.scala-lang.org/browse/SI-2568

+2
source

Source: https://habr.com/ru/post/1495946/


All Articles