使用 Java 中的引用来产生副作用

Working with references in Java to create side effects

我习惯于使用明确允许您使用的语言 references/pointers,我正在尝试做的事情依赖于现在。

如果我有一个对象class Foo 并且我有三个对象class Bar如何让 class Bar 的所有三个对象引用 Foo 的一个实例?

(我靠的是副作用)

如果这在 Java 中完全可行(我相信这会给您一份参考资料的副本,但我已经阅读了相互矛盾的信息,现在仍然有点困惑)

If this is possible in Java at all (which I believe gives you a copy of a reference, but I've read conflicting information and now remain a little confused)

也许您习惯于使用像 C 这样的语言,它们将内存视为一个巨大的数组,并使用指向数据结构的指针(和指向指针的指针)。 Java 与 C 的不同之处在于使用引用(而不是指针)和对象(而不是结构)。

Java 中指针的模拟是 引用变量 ,它存储对对象的引用。引用变量的值是一个指针,但在 Java 中你从不使用指针值本身,只使用它所引用的对象。

如果您有这样定义的 class:

public class Bar {
    private Foo fooRef;

   public Bar(Foo foo) {
       this.fooRef = foo;
   }

   :
   :
}

请注意,Bar 被定义为具有可变实例字段,fooRef 将包含对类型 Foo.

的对象的引用

下面将实例化Bar的三个实例,每个实例都引用 同一个 Foo 对象:

Foo myFoo = new Foo();

Bar bar1 = new Bar(myFoo);
Bar bar2 = new Bar(myFoo);
Bar bar3 = new Bar(myFoo);

因为实例字段 fooRef 是可变的,所以包含它的对象可以通过任何可以访问该字段的方法来改变。这会产生您正在寻找的副作用(尽管可变字段在并发编程中是一个特别值得关注的问题)。