如何设置不可变字段

时间:2012-06-07 16:49:28

标签: java

  private static final Class<? extends UserManager> type;

  private static void setType(final Class <? extends UserManager> theType){
      if(type == null) type = theType;
      else throw new IllegalStateException("Type already set.");
  }

我希望得到类似上面的内容,但它不会编译,因为type不是final任何人都知道如何在Java中执行此操作?有可能吗?

2 个答案:

答案 0 :(得分:2)

这本质上是不可能的 final表示初始化完成后无法更改它。

答案 1 :(得分:0)

默认情况下,这是不可能的,但是使用反射:)都可能

      Field modifiersField = Field.class.getDeclaredField("modifiers");
      modifiersField.setAccessible(true);
      modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

      field.set(null, newValue);