2012-10-05 110 views
4

一个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,并且这可行。但我想知道这是否有必要。

回答

12

否: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; 
    } 
} 
+0

我会用String来代替Number,因为他在他的例子中使用过它:D太挑剔,我知道:D但是很好的简短回答 – sheidaei

+3

AtomicInteger是一个数字。 –

+0

这就是我认为......谢谢:) –

3

您不能更改一次分配的final整数值。但是,您可以延迟赋值,即: - 只能分配一次final整数..您可以在声明时执行此操作,或者在初始化程序块或构造函数中。

6

你不能因为它的设计不变。

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

2

值你可以换你整数另一个对象是最终再由另一个“取代”是包装对象内的整数。

+0

这就是我想..谢谢:) –