4

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

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

是否可以对 a 做同样的事情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

4 回答 4

13

否:anInteger是不可变的,就像 example 一样String

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

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;
    }
}
于 2012-10-05T16:14:54.693 回答
6

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

您可以设置int[]Integer[]或的值AtomicInteger

于 2012-10-05T16:15:57.827 回答
3

分配后,您无法更改final整数的值。但是,您可以延迟分配。,即:-您只能分配一次final整数。您可以在声明时,或在初始化程序块中,或在构造函数..

于 2012-10-05T16:14:53.483 回答
2

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

于 2012-10-05T16:16:25.317 回答