簡體   English   中英

Java 8中的三元運算符,使用Maven編譯

[英]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語句中使用的三元運算符:

  • 它用Java 8默認編譯器編譯,但這會在運行時導致NullPointerException,為什么?
  • 使用Maven會導致編譯時錯誤
[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM