环境:
- eclipse
- 行家 3.2.3
- Java 7
我看过 questions像这样,但我不明白的是为什么 eclipse 可以编译这个文件,而我们不能通过 shell 来完成。
我也知道这个文件必须是一个属性文件,但它是我在项目中找到的。
Eclipse 编译 de 文件并创建字节码 Messeges.class,但 javac 和 mvn 都不能这样做,因为错误:代码太大。
这个文件 Messages.java 是一个有 3232 行的枚举,用作将所有这些加载到内存中的属性。它有大约 3100 种不同的元素。
Messages.java
public enum Messages {
MENU_MANAGEMENT("Management menu"),
...3100..
MENU_OTHER("Other");
private String name;
private Messages(String name) {
this.name = name;
}
...
}
错误
$javac Messages.java
Messages.java:11: error: code too large
MENU_MANAGEMENT("Management menu"),
^
1 error
eclipse 如何或为什么编译它?我不明白 Eclipse 是如何做到这一点的?
最佳答案
当枚举常量的数量高于 2000 时,eclipse 会生成合成方法来绕过代码大小限制。
参见 https://bugs.eclipse.org/bugs/show_bug.cgi?id=331334
顺便说一句:在你的 Maven 构建中切换到 ecj 作为编译器也不是一个长期的解决方案:这个解决方案只在 Java 9 之前有效,因为自 https://bugs.java.com/view_bug.do?bug_id=JDK-8157181 以来不允许在初始化方法之外初始化 final 字段。
关于java - 为什么eclipse编译shell javac或mvn产生错误: code too large?的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502600/