- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
采用这两个 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/
我遇到的问题不是紧急情况,但我不知道该怎么做。我有两个 aspx 网络表单页面。每个都有一个下拉列表。两者都由来自 sql server 的相同数据源填充。问题是,如果我在第 1 页选择一个值,然后转
我正在使用 OpenvSwitch-2.5.2 在两个虚拟机上设置第 2 层网络,如上图所示。 在阅读了 ovs 官方教程和其他一些文章后,我在每个虚拟机上尝试了以下命令: # on vm1 ip l
我是一名优秀的程序员,十分优秀!