更改最终Integer变量的值

时间:2012-10-05 16:13:51

标签: java class integer final

无法更改final对象,但我们可以设置其属性:

final MyClass object = new MyClass();
object.setAttr("something");              //<-- OK
object = someOtherObject;                 //<-- NOT OK

是否可以对final Integer执行相同操作并更改其int值?

我问,因为我打电话给工人:

public SomeClass myFunction(final String val1, final Integer myInt) {

    session.doWork(new Work() {
    @Override
    public void execute(...) {
        //Use and change value of myInt here
        //Using it requires it to be declared final (same reference)
    }
}

我需要在其中设置myInt的值。

我可以在另一个类中声明我的int,这样可行。但我想知道这是否必要。

4 个答案:

答案 0 :(得分:13)

否:Integer是不可变的,就像例如String一样。

但是你可以设计自己的类来嵌入一个整数并使用它而不是整数:

public class MutableInteger {
    private int value;
    public MutableInteger(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
}

答案 1 :(得分:6)

你不能,因为它在设计上是不可变的。

您可以设置int[]Integer[]AtomicInteger

的值

答案 2 :(得分:3)

一旦分配,你就不能改变final整数的值。但是,你可以延迟分配。,即: - 你只能分配一个final整数..你可以这样做在声明时,或在初始化程序块中,或在构造函数中。

答案 3 :(得分:2)

您可以将Integer包装在另一个最终的对象中,然后将另一个包装器对象中的Integer“替换”。