User Tools

Site Tools


inner_classfiles_naming

Differences

This shows you the differences between two versions of the page.


Previous revision
inner_classfiles_naming [2025/01/15 21:40] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +From the beginning of the introduction of [[http://jcp.org/aboutJava/communityprocess/maintenance/JLS/innerclasses.pdf|inner classes]] in Java, developers knew that it would be a mess... and it has been proven again and again. Here is a recent example. Take the following (academic) piece of code:
  
 +<code>
 +public class Anonymous {
 + public void foo() {
 + class B {}
 + new B();
 + }
 +}
 +</code>
 +
 +Compile it with your standard Java compiler ''javac''. On both MacOS and Windows, there are two files generated... **BUT**, these two files have different names (!), thus throwing on the ground some of the dedicated [[PADL]] tests (in particular in project [[PADL Creator ClassFile|PADL Creator ClassFile Tests]])
 +
 +  * On MacOS
 +    * ''Anonymous.class''
 +    * ''Anonymous$1B.class''
 +  * On Windows
 +    * ''Anonymous.class''
 +    * ''Anonymous$1$B.class''
 +
 +Did you notice the difference? on MacOS, the file describing the inner class is named ''Anonymous$1B.class'' with only one $ sign; on Windows, its name is ''Anonymous$1$B.class'' with two $ signs. **Sigh...**