Also, ich arbeite weiter an meinem Spigot Plugin (in Java) und möchte nun einen for loop, in welchem eine Variable c deklariert ist, haben, und dieses c in das runTaskLater() übergeben. Dort wird ein final int y = c gesetzt.
for (int c = 0; c <= 100; c++) {
Bukkit.getScheduler().runTaskLater(this, () -> {
for (int i = 0; i <= 100; i++){
for (int j = 0; j <= 100; j++){
final int x = i;
final int y = c;
final int z = j;
//...
}
}
},200L);
}
Jedoch bekomme ich folgenden Fehler:
Variable used in lambda expression should be final or effectively final
Dann, nach befolgen der Korrekturvorschläge:
for (int c = 0; c <= 100; c++) {
int tempC = c;
Bukkit.getScheduler().runTaskLater(this, () -> {
for (int i = 0; i <= 100; i++){
for (int j = 0; j <= 100; j++){
final int x = i;
final int y = tempC;
final int z = j;
//...
}
}
},200L);
}
Und es funktioniert.
Warum muss ich c nochmal in einer anderen Variable speichern, bevor ich es weitergeben kann? Die Datentypen, Sichtbarkeiten, etc sind nämlich bei c und tempC die gleichen.
Außerdem, was genau hat die Fehlermeldung mit allem zu tun, weil die Orte an welchen final steht haben sich nicht verändert?
Übrigens, es liegt nicht an schon festgelegten Variablen, da kein anderer Variablenname anstelle von c funktioniert, ohne diesen Fehler zu erzeugen.
Ich hoffe jemand kann mir weiterhelfen!