Я наткнулся на следующий код в базе кода, над которой я работаю:
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 объявлен final. Почему объекты могут быть добавлены в INSTANCE? Не должно ли это сделать недействительным использование финала. (Это не так).
Я предполагаю, что ответ должен что-то делать с указателями и памятью, но хотел бы знать наверняка.