TLDR: i
nicht final
weil es modifiziert wird (i++
) bei jeder Iteration der Schleife for
.
why i is not effectively final inside the scope of the for loop ?
Die for
Schleifensyntax ist
for (initialization; termination; increment) {
statement(s)
}
Die Inkrementausdruck nach jeder Iteration durch die Schleife aufgerufen wird. In Ihrem Fall ist das Inkrement i++
, so dass i
nach jeder Iteration geändert wird.
Sie können dies bestätigen i
Letztendliche-Erklärung:
for (final int i = 0; i < x.getBooks().size(); i++) {
}
Sie diese Zusammenstellung Fehler:
The final local variable i cannot be assigned.
It must be blank and not using a compound assignment
is this the simplest workaround ?
Im Falle einer for
Schleife: ja.
Aber Sie könnten eine while
Schleife verwenden, wie sie durch @dkatzel oder ein foreach
gezeigt:
int i = 0;
for (Book book: x.getBooks()) {
int i2 = i;
...
i++;
}
Wo benutzen Sie 'i' oder' i2'? – dkatzel
effektiv endgültig? Ich bin mir nicht sicher, was das bedeutet. Ihr Code verwendet nicht einmal "i" in der Lambda –
Entschuldigung für den Tippfehler - jetzt bearbeitet. – Dan