Java 1.5及1.6編譯器在下面情況時會額外產生synthetic class檔,也就是類別名稱後接金錢符號(dolor symbol)的class檔(<Class$1.class>
)。
- 建立匿名類別實例
- 列舉(enum)的swtich case
- 建立私有內部類別實例
例如Demo.java
內容如下。
Demo.java
public class Demo {
private void run() {
// 1. 建立匿名類別實例 anonymous class instantiation
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
}
});
}
private String getColor(ColorEnum colorEnum) {
// 2. enum switch case
switch (colorEnum) {
case RED: return "red";
case BLUE: return "blue";
default: return "white";
}
}
enum ColorEnum {
RED, BLUE;
}
public Inner getInner() {
// 3. 私有內部類別實例化 private inner class instantiation
return new Inner();
}
private static class Inner {
// Private inner class default constructor is private
}
}
使用javac -source 1.5 -target 1.5 Demo.java
編譯後產生的class檔如下:
Demo.class
Demo$Color.class
Demo$Inner.class
Demo$1.class
(for anonymous class and private inner class instantiation)Demo$2.class
(for enum swtich case)
通常那些沒使用CICD上版工具的老舊專案,如果上版時只更新被修改的class檔,這會是很可怕的地雷。
沒有留言:
張貼留言