0

我正在使用 Java 4;前段时间我遇到了一个在公共类中声明为的变量:

final private static Set name = new HashSet(){
  {
     add(object1); 
     ...; 
     add(objectN);
  }
};

在某些情况下,我需要在运行时向它添加(或删除)对象。

该类有一个公共构造函数,在我必须向所述 Set 添加或删除对象之前调用它。

我认为最终变量被视为常量,因此我无法在运行时对其调用 .add(object) 和 .remove(object) 方法。但我还是这样做了,我创建了两个公共方法来执行添加和删除操作,并且它有效。

为什么?我希望它要么不编译,要么在运行时抛出某种异常。

有人可以解释吗?

非常感谢,

此致

4

3 回答 3

3

对变量的引用name基本上是一个常量,不能修改。但是,正如您所发现的,集合的内容可以在运行时发生变化。为了防止这种情况,您可以使其不可变,例如

final private static Set name = Collections.unmodifiableSet(new HashSet(){
    {
        add(object1); 
        ...; 
        add(objectN);
    }
});
于 2012-11-16T19:45:32.357 回答
2

您不能更改最终变量的引用,但可以更改状态。

例如:

你不能改变参考name = new HashSet();

于 2012-11-16T19:41:05.703 回答
1

在它们所属的类的构造函数执行后,不能为最终变量分配新的引用。但是,您绝对可以通过调用它们的方法来更改它们的内部状态。

于 2012-11-16T19:41:48.863 回答