簡體   English   中英

javac奇怪的語法 - 錯誤非法啟動表達式

[英]javac strange syntax - error illegal start of expression

我遇到了一個奇怪的錯誤,我認為這是一個錯誤。 這是一個小例,請不要評論代碼的用處:)

class Foo {

    static public <X> int bar() { return 42; }

    public int baz() {
        return true ? 42 : (
            Foo.<Void>bar() > 42 ? 41 : 43
        )
        ;
    }
}

結果:

err.java:7: illegal start of expression
        Foo.<Void>bar() > 42 ? 41 : 43
            ^

我試過SUN SDK javac 1.6.0_13和1.6.0_21。
當我要么,錯誤消失了

  • 使bar()非通用(只是為了好奇,不是真正的選擇)
  • 刪除第7行三元表達式周圍的括號

所以看起來如果e是一個表達式,那么寫(e)並不總是有效的?

發布的代碼使用Eclipse編譯(並運行)對我很好,但我可以確認javac無法編譯它。 我懷疑你在javac發現了編譯器錯誤。

報告它可能是個好主意。

我設法通過代碼中的一點改變來編譯它。所以,我想這與條件運算符規范(有點復雜)或bug有關。但這個問題只出現在條件運算符中。

class Foo {

    static public <X> int bar() { return 42; }

    public int baz() {
        return true ? 42 : (
            ((int)Foo.<Void>bar()) > 42 ? 41 : 43
        );
    }
}

這個bug已經有3年了,但顯然不會在jdk 1.6中修復。 但是,它在jdk 1.7 beta 14中修復(開發人員預覽是b185,因此它已修復,我已經嘗試過了)。

是返回值,您不必通過調用靜態方法來指定它:

class Foo {

    static public <X> int bar() { return 42; }

    public int baz() {
        return true ? 42 : (
            Foo.bar() > 42 ? 41 : 43     
        )
        ;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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