Warum kann das endgültige Objekt geändert werden?
In einer Codebasis, an der ich arbeite, bin ich auf folgenden Code gestoßen:
public final class ConfigurationService {
private static final ConfigurationService INSTANCE = new ConfigurationService();
private List providers;
private ConfigurationService() {
providers = new ArrayList();
}
public, static void addProvider(ConfigurationProvider provider) {
INSTANCE.providers.add(provider);
}
...
INSTANCE
wird deklariert alsfinal
. Warum können Objekte hinzugefügt werdenINSTANCE
? Sollte das nicht die Verwendung von final ungültig machen? (Es tut nicht).
Ich gehe davon aus, dass die Antwort etwas mit Zeigern und Gedächtnis zu tun hat, möchte es aber sicher wissen.