在Java中,在运行时向最终静态哈希集添加(或删除)对象?

在Java中,在运行时向最终静态哈希集添加(或删除)对象?,java,static,runtime,set,final,Java,Static,Runtime,Set,Final,我正在使用Java4;不久前,我遇到一个变量,它在公共类中声明为: final private static Set name = new HashSet(){ { add(object1); ...; add(objectN); } }; 在某些情况下,我需要在运行时向它添加(或删除)对象 该类有一个公共构造函数,在我必须向该集合添加或删除对象之前调用了该构造函数 我认为最终变量被视为常量,因此在运行时无法对其调用.add(对象)和.remove(对

我正在使用Java4;不久前,我遇到一个变量,它在公共类中声明为:

final private static Set name = new HashSet(){
  {
     add(object1); 
     ...; 
     add(objectN);
  }
};
在某些情况下,我需要在运行时向它添加(或删除)对象

该类有一个公共构造函数,在我必须向该集合添加或删除对象之前调用了该构造函数

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

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

有人能解释一下吗

多谢各位


致意

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

例如:


您不能像
name=newhashset()那样更改引用

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

例如:


您不能像
name=newhashset()那样更改引用

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

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

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


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

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