ich einen reproduzierbaren Testfall habe (Java Bug?):Warum ein leeres Lambda und Konstruktor mit einer expliziten Rückkehr eines Compiler-Fehler verursachen
public class TestCase {
private final java.util.function.Consumer<Object> emptyCallback = result -> {};
public TestCase() {
return;
}
public static void main(String... args) {
new TestCase();
}
}
mit Java 8 aktualisiert 51 (Oracle JDK). Dies kann nicht mit IntelliJ und javac kompiliert werden.
IntelliJ Ausgang:
Error(6, 7): java: variable result might not have been initialized
Javac Ausgang:
TestCase.java:6: error: Variable result might not have been initialized
return;
^
1 error
Nun, was seltsam ist, ist, dass return;
oder die Consumer
Entfernen wird den Fehler beheben. Ist das ein Java-Bug oder gibt es etwas vom Sprachdesign, das mir hier fehlt?
Edit: Dies ist kein Duplikat von How can a constructor return a value, das ist eigentlich ein Konstruktor und ist nicht über den Rückgabewert des Konstruktors sondern Variable Initialisierung.
Mögliche Duplikat [Java: Wie ein Konstruktor einen Wert zurückgeben kann] (http://stackoverflow.com/questions/2574276/java-how-can-a-constructor-return-a-value) –
Warum kommst du von einem Konstruktor zurück? –
@ElliottFrisch Dies ist ein sehr verwässertes, reproduzierbares Beispiel aus einem anderen Problem, bei dem der Konstruktor beim Aufruf von System # exit sofort beendet werden sollte. – Rogue