有时我想将不可变对象传递给方法并在方法内部更改其值,或者我想将另一个对象分配给参数引用(示例 1)。或者我想在匿名内部类内部将另一个对象分配给最终的局部变量(示例 2)。因为所有这些情况都不可能,所以有时我会为此目的使用 Atomic(Integer|Long...) 类或列表(这真的很糟糕,因为列表可以包含多个对象)。或者,我可以创建一个包含对象并允许更改对象的类:
public class ReferenceExample {
public static void main(String[] args) {
final Reference<String> string = new Reference<>("a");
// Example 1:
method(string);
// Example 2:
new Thread() {
@Override
public void run() {
string.set("c");
};
}.start();
}
public static void method(Reference<String> string) {
string.set("b");
}
private static class Reference<T> {
private T value;
public Reference() {}
public Reference(T value) {
this.value = value;
}
public T get() {
return value;
}
public void set(T value) {
this.value = value;
}
}
}
我想知道Java或公共库中是否已经存在这样的类(例如,在apache公共项目中)?如果没有,对于这些问题还有其他好的解决方案吗?