Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java版本的;指针指针;_Java_Reference - Fatal编程技术网

Java版本的;指针指针;

Java版本的;指针指针;,java,reference,Java,Reference,我曾经遇到过这样一种情况,来自体系结构不同部分的多个类希望查看相同的数据结构,如果我保留数据结构并更新信息,那么这些数据结构可能会被完全替换(例如,当更新的版本来自网络时)(所有东西都可以引用同一个,并且在查看时会获得最新信息),但如果引用被完全重新分配,则不会在其他地方反映出来 我想做一个超级通用的包装器,比如: public class Wrapper<T>{ public T _value; } 公共类包装器{ 公共T_值; } 您永远不会重新分配包装器,只分配其中

我曾经遇到过这样一种情况,来自体系结构不同部分的多个类希望查看相同的数据结构,如果我保留数据结构并更新信息,那么这些数据结构可能会被完全替换(例如,当更新的版本来自网络时)(所有东西都可以引用同一个,并且在查看时会获得最新信息),但如果引用被完全重新分配,则不会在其他地方反映出来

我想做一个超级通用的包装器,比如:

public class Wrapper<T>{
    public T _value;
}
公共类包装器{
公共T_值;
}
您永远不会重新分配包装器,只分配其中的值。然后,所有不同的组件都可以指向包装器,当出现“新”版本时,内部值可以干净地重新分配。(我想我在C中看到了
**

但是,我怀疑我以前从未见过这种情况。有没有更好的方法来解决这个问题?

使用

String initialReference=“初始值已引用”;
原子引用原子字符串引用=
新原子参考(初始参考);
String newReference=“新引用的值”;
//直接更新
原子引用.set(newReference);
//比照
布尔值=atomicStringReference.compareAndSet(initialReference,newReference);
System.out.println(“交换:+exchanged”);
交换=atomicStringReference.compareAndSet(initialReference,newReference);
System.out.println(“交换:+exchanged”);
//获得价值
String reference=atomicReference.get();

来自

的代码示例可能是一个很好的选择,因此您可以保证在多个线程上进行最新的读取。另外,考虑将“代码>版本/代码>字段添加到可更新的数据结构的实例中,这样观察者可以在查看其他数据时检测数据是否被更新。我所代表的东西并不是严格不变的(有时我修改它,有时我想替换它)那么指针是什么?指针指针部分会起作用。如果你的对象是可变的,并且你正在使用多线程环境,那么你也需要处理并发性。你也可以考虑使用AtomicReference来实现你的类的可变字段。@波希米亚,是的,我同步了它,但是我读到的代码是<代码> AtomicReferen。ce经常说“不可变”,所以我担心我可能会在某个地方违约。
String initialReference = "initial value referenced";

AtomicReference<String> atomicStringReference =
    new AtomicReference<String>(initialReference);

String newReference = "new value referenced";
//directly update
atomicReference.set(newReference);

//compare and set
boolean exchanged = atomicStringReference.compareAndSet(initialReference, newReference);
System.out.println("exchanged: " + exchanged);

exchanged = atomicStringReference.compareAndSet(initialReference, newReference);
System.out.println("exchanged: " + exchanged);

//get value
String reference = atomicReference.get();