gpt4 book ai didi

java - 有什么好方法可以让两个不可变对象(immutable对象)互相引用?

转载 作者:太空狗 更新时间:2023-10-29 23:04:25 25 4
gpt4 key购买 nike

采用这两个 Java 类:

class User {
final Inventory inventory;
User (Inventory inv) {
inventory = inv;
}
}

class Inventory {
final User owner;
Inventory (User own) {
owner = own;
}
}

有什么办法without using reflection*把它拉下来?我实际上并不期望它是,但问问也无妨。

更新:因为在字节码构造中有两个步骤(1. 分配对象,2. 调用构造函数**)这是否可以(ab)用于执行此操作,使用手写字节码或自定义编译器?我说的是首先对两个对象执行步骤 1,然后对两个对象执行步骤 2,使用步骤 1 中的引用。当然,这样的事情会相当麻烦,这部分问题是学术性的。

(* 因为反射可能会给安全管理器带来麻烦)

(** 表示我的知识有限)

最佳答案

只有当其中一个对象由另一个对象创建时,这才能干净地工作。例如,您可以将 User 类更改为如下内容(同时保持 Inventory 类不变):

class User {
private final Inventory inventory;
User () {
inventory = new Inventory(this);
}
}

您需要小心访问 Inventory 构造函数中的 User 对象,但是:它尚未完全初始化。例如,它的 inventory 字段仍然是 null!

广告更新:我现在已经确认字节码操作方法不起作用。我试过使用 Jasmin它总是无法加载 VerifyError .

深入研究这个问题,我发现 § 4.10.2.4 Instance Initialization Methods and Newly Created Objects .本节介绍 JVM 如何确保仅传递已初始化的对象实例。

关于java - 有什么好方法可以让两个不可变对象(immutable对象)互相引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com