私は、再現可能なテストケースがあります:Javaの8、更新51(OracleのJDK)を使用してなぜ明示的な戻りで空のラムダとコンストラクタは、コンパイラエラー(Javaのバグ?)を起こすん
public class TestCase {
private final java.util.function.Consumer<Object> emptyCallback = result -> {};
public TestCase() {
return;
}
public static void main(String... args) {
new TestCase();
}
}
を。これは、IntelliJとjavacの両方を使用してコンパイルすることはできません。
IntelliJの出力:
Error(6, 7): java: variable result might not have been initialized
javacの出力:
TestCase.java:6: error: Variable result might not have been initialized
return;
^
1 error
今奇妙な何であるか、またはreturn;
Consumer
を削除するとエラーを修正するということです。これはJavaのバグですか、ここでは紛失している言語の設計がありますか?
編集:これはHow can a constructor return a valueの複製ではなく、実際にはコンストラクタであり、コンストラクタの戻り値ではなく変数の初期化ではありません。
[Javaの?:コンストラクタが値を返すことができる方法]の可能性のある重複(http://stackoverflow.com/questions/2574276/java-how-can-a-constructor-return-a-value) –
なぜあなたはコンストラクタから 'return'を返しますか? –
@ElliottFrischこれは、System#exitを呼び出すとすぐにコンストラクターが終了するはずだった、別の問題から非常に疲れた再現可能な例です。 – Rogue