[英]Generics compilation error with ternary operator in Java 8, but not in Java 7
[英]Ternary operator in Java 8, compilation with Maven
考虑这个课程:
package be.duo.test;
public class Main {
public static void main(String[] args) {
Main main = new Main();
main.execute();
}
private void execute() {
for(int i = 0; i < 10; i++) {
System.out.println("" + method());
}
}
private int method() {
return (Math.random() > 0.5d) ? 1 : null;
}
}
method()的返回类型为int
,它是一种基本类型。
考虑return语句中使用的三元运算符:
[ERROR] error: incompatible types: bad type in conditional expression
[ERROR] <null> cannot be converted to int
有人可以向我解释为什么它表现不同吗?
据我所知,它应该在Java 8下合法。
见表15.25-E。 条件表达式类型(参考第3操作数,第III部分) :
3rd → null
2nd ↓
int lub(Integer,null)
lub(Integer,null)
应该是Integer
。 基本上如果你有一个boolean ? int : null
形式的条件boolean ? int : null
boolean ? int : null
,表达式的结果应该是Integer
并且它被取消装箱。 (我想你已经知道这是发生了什么。)
所以根据规范它应该是相同的。
看起来像编译器错误。 已经发现了不少这些,我会说尝试更新到最新版本。
不确定您使用的是哪个Java 8次要版本,但我可以在java 1.8下编译。
C:\Users\XXXX>javac -version
javac 1.8.0_31
C:\Users\XXXX>javac Main.java
C:\Users\XXXX>java Main
Exception in thread "main" java.lang.NullPointerException
at Main.method(Main.java:15)
at Main.execute(Main.java:10)
at Main.main(Main.java:5)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.