在有人大喊EOL’ed JDK之前,我想指出,我的问题不在于如何编译以下内容.这里有一个真正的问题,而不是关于JDK 1.5是否已停产……
在JDK 1.5之下,直到1.5.0_22(我可以找到的最后一个)在我的系统上产生了一个编译器错误:
private Object[] boozinga() {
boolean b = Math.abs(42) > 0;
Object[] res = new Object[1];
res[0] = b ? new int[1] : new String[1];
return res;
}
更改Math.abs(42)> 0到true允许编译.
将三元“赋值”更改为if / else可以进行编译.
使用JDK 1.6可以进行编译.
所以我想知道:在Java 1.5中,上述代码中是否存在某些不合法的东西,而Java 1.6中是允许的吗?
是否也会对Java 1.5以下的用户崩溃?
飞机坠毁说出这样的话:
An exception has occured in the
compiler (1.5.0_22). Please file a bug
at the Java Developer Connection
(http://java.sun.com/webapps/bugreport)
after checking the Bug Parade for
duplicates. Include your program and
the following diagnostic in your
report. Thank you.
我认为它填补了EOL’ed JDK的错误报告是徒劳的,但我仍然想知道上面的代码是否有效的Java 1.5代码.
解决方法:
我认为这是合法的.证据表明JDK 1.6.0_21使用选项-source 1.5 -target 1.5对其进行了编译.您不能使用带有这些选项的JDK 1.6进行编译以及无法运行JRE 1.5吗?
它也对我崩溃(JDK 1.5.0_12).即使我崩溃了:
public Object boozinga() {
boolean b = true;
Object res = b ? new int[1] : new String[1];
return res;
}
编译器的困难在于b的类型. new int [1]:新的String [1]是java.lang.Object& java.io.Serializable& java.lang.Cloneable.
标签:exception,compiler-construction,java
来源: https://codeday.me/bug/20191208/2090715.html