使用 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
是可变的,所以包含它的对象可以通过任何可以访问该字段的方法来改变。这会产生您正在寻找的副作用(尽管可变字段在并发编程中是一个特别值得关注的问题)。
我习惯于使用明确允许您使用的语言 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
是可变的,所以包含它的对象可以通过任何可以访问该字段的方法来改变。这会产生您正在寻找的副作用(尽管可变字段在并发编程中是一个特别值得关注的问题)。