Inner Klassen haben nur Zugriff auf endgültige oder effektiv endgültige Variablen. Ich verstehe jedoch nicht, warum auf eine Instanzvariable zugegriffen werden kann, egal wie, aber lokale Variablen und Methodenparameter müssen minimal effektiv sein?Effektiv final - Inner Klassen Zugriff
Betrachten Sie den folgenden Code ein:
public class BookStore {
private static final int taxId = 300000;
public String name;
public String searchBook(final String criteria) {
int count = 0;
int sum = 0;
// name = ""; I can uncomment this -> no compile error
class Enumerator {
String interate(int k) {
System.out.println(name);
System.out.println(sum);
return "";
}
}
// sum++; If I uncomment this, a compile error will be thrown.
return "";
}
}
Warum ist es notwendig, dass die lokalen Variablen + Methodenargumente effektiv endgültig sein müssen?
Was meinst du mit „der Enumerator-Klasse außerhalb zugegriffen werden kann“? – codepleb
Es kann nicht mit dem genauen Code, den Sie geschrieben haben, aber der Compiler berücksichtigt die theoretische Möglichkeit, die es könnte. Sie könnten etwas wie neue Enumerator(); Das würde einen Verweis auf ein Enumerator-Objekt an den äußeren Bereich übergeben. –
Das geht nicht, wenn ich mich nicht irre. Ich kann den Typ "Enumerator" mit dieser Methode nicht zurückgeben, da der Compiler diesen Typ nicht kennt, wenn Sie ihn in der Methode angeben. – codepleb