我遇到了一个奇怪的错误,我认为这是一个错误。 这是一个极小的情况,请不要评论代码的有用性:)
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)并不总是有效的吗?
答案 0 :(得分:6)
发布的代码使用Eclipse编译(并运行)对我来说很好,但我可以确认javac
无法编译它。我怀疑你在javac
找到了编译器错误。
report it可能是个好主意。
答案 1 :(得分:1)
我设法通过代码中的一点变化来编译它。所以,我猜这与条件运算符规范(有点复杂)或bug有关。但是这个问题只出现在条件运算符中。 / p>
class Foo {
static public <X> int bar() { return 42; }
public int baz() {
return true ? 42 : (
((int)Foo.<Void>bar()) > 42 ? 41 : 43
);
}
}
答案 2 :(得分:1)
该错误已经有3年了,但显然不会在jdk 1.6中修复。但是,它在jdk 1.7 beta 14中修复(开发者预览版是b185,因此它已修复,我已经尝试过了。)
答案 3 :(得分:-3)
是返回值,您不必通过调用静态方法来指定它:
class Foo {
static public <X> int bar() { return 42; }
public int baz() {
return true ? 42 : (
Foo.bar() > 42 ? 41 : 43
)
;
}
}