我在我正在处理的代码库中遇到以下代码:
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);
}
...
Run Code Online (Sandbox Code Playgroud)
INSTANCE被宣布为final.为什么可以添加对象INSTANCE?不应该使final的使用无效.(它没有).
我假设答案必须用指针和内存做一些事情,但我想肯定知道.
通过使ArrayList(或其他Collection)最终获得哪些优点/缺点?我仍然可以添加ArrayList新元素,删除元素并更新它.但是什么影响使它成为最终的?
有人告诉我,我误解了final.的影响.final关键字有什么影响?
以下简要概述了我的想法,我知道:
Java final修饰符(又称聚合关系)
原始变量:只能设置一次.(内存和性能增益)
对象变量:可以修改,最终适用于对象引用.
字段:只能设置一次.
方法:不能被覆盖,隐藏.
课程:不能扩展.
垃圾收集:将强制Java世代垃圾收集标记扫描双扫.
没有替代品final,但有包装+私人和枚举.
如果我在Synapse一个抽象类型的类中有以下语句:
private final List<Synapse> synapses;
Run Code Online (Sandbox Code Playgroud)
是否final允许我仍然能够更改Synapse对象的状态List,但是阻止我将新Synapse对象添加到列表中?如果我错了,你能否解释一下我final在做什么以及什么时候应该使用关键字final.