Por que o objeto final pode ser modificado?
Me deparei com o seguinte código em uma base de código em que estou trabalhando:
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
é declarado comofinal
. Por que os objetos podem ser adicionados aINSTANCE
? Isso não deve invalidar o uso de final. (Não).
Presumo que a resposta tenha algo a ver com ponteiros e memória, mas gostaria de ter certeza.