This shows you the differences between two versions of the page.
inner_classfiles_naming [2018/03/04 02:53] |
inner_classfiles_naming [2019/10/06 20:37] (current) |
||
---|---|---|---|
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...** |