[英]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。
當我要么,錯誤消失了
所以看起來如果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.