是否有一个Java;“参考对象”;存在?
有时,我希望将一个不可变对象传递给一个方法并在该方法内部更改其值,或者我希望将另一个对象分配给参数引用(示例1)。或者,我想在匿名内部类内部为最终的局部变量分配另一个对象(示例2)。因为所有这些情况都不可能实现,所以有时我会使用原子(Integer | Long…)类或列表(这非常糟糕,因为列表可以包含多个对象)来实现这一目的。或者,我可以创建一个类来保存对象并允许更改对象:是否有一个Java;“参考对象”;存在?,java,object,reference,Java,Object,Reference,有时,我希望将一个不可变对象传递给一个方法并在该方法内部更改其值,或者我希望将另一个对象分配给参数引用(示例1)。或者,我想在匿名内部类内部为最终的局部变量分配另一个对象(示例2)。因为所有这些情况都不可能实现,所以有时我会使用原子(Integer | Long…)类或列表(这非常糟糕,因为列表可以包含多个对象)来实现这一目的。或者,我可以创建一个类来保存对象并允许更改对象: public class ReferenceExample { public static void main
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;
}
}
}
公共类引用示例{
公共静态void main(字符串[]args){
最终参考字符串=新参考(“a”);
//例1:
方法(字符串);
//例2:
新线程(){
@凌驾
公开募捐{
字符串集(“c”);
};
}.start();
}
公共静态无效方法(引用字符串){
字符串集(“b”);
}
私有静态类引用{
私人T值;
公共引用(){}
公共参考(T值){
这个值=值;
}
公共部门得不到{
返回值;
}
公共无效集(T值){
这个值=值;
}
}
}
我想知道Java或公共库(例如apache公共项目)中是否已经存在这样的类?如果没有,还有其他解决这些问题的好方法吗?普通java中没有通用的、通常使用的解决方案。使用一个而不是使用特定于javaish的解决方案可能是不好的做法 共同解决办法:
- 让调用者进行分配:
myVal=anObject.aMethod(myVal)代码>
- 提供封闭对象
anObject.aMethod(这个)代码>
- 提供一个回调,该回调将为变量分配一个新值。为此,通常必须定义回调实现的接口: anObject.aMethod(新MySetter(){ 公共无效集(int newval){ myVal=newval; }; });
的确,java有时会迫使您进行更多您想要的封装。这似乎是一件好事,也可能被视为java被视为冗长语言的原因之一。您已经找到了主要的解决方案,但其他两种常见的方法是
,看起来您已经找到了它AtomicReference
- 单个元素数组,或多或少充当可变引用
- 从方法返回(可能不同的)引用
- 在包含可变引用作为字段的类中实现该方法,这通常更合适