我正在使用Java 4;前段时间我遇到了一个在公共类中声明的变量:
final private static Set name = new HashSet(){
{
add(object1);
...;
add(objectN);
}
};
我需要在某些情况下在运行时添加(或删除)对象。
该类有一个公共构造函数,在我不得不向对象添加或删除对象之前调用它。
我认为最终变量被视为常量,因此我无法在运行时调用它上面的.add(object)和.remove(object)方法。但无论如何我做了它,我创建了两个公共方法来执行添加和删除操作,并且它有效。
为什么呢?我希望它不要编译或在运行时抛出某种异常。
有人可以解释一下吗?
非常感谢,
最好的问候
答案 0 :(得分:2)
您无法更改最终变量的引用,但可以更改状态。
例如:
您无法更改name = new HashSet();
答案 1 :(得分:2)
对name
变量的引用基本上是常量,无法修改。但是,如您发现的那样,集合的内容可以在运行时进行变更。为了防止这种情况,您可以将其设为 immutable ,例如
final private static Set name = Collections.unmodifiableSet(new HashSet(){
{
add(object1);
...;
add(objectN);
}
});
答案 2 :(得分:1)
在它们所属的类的构造函数执行后,不能为最终变量赋予新引用。但是,你肯定可以通过调用它们的方法来改变它们的内部状态。