gpt4 book ai didi

Java:用于更新不共享相同引用的所有相等对象(在相同上下文中)的模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:50 25 4
gpt4 key购买 nike

在我的 java 应用程序中,我在不同的地方多次使用相同的对象。这意味着在比较这些对象时,equals 方法返回 true。现在我想更新一个对象并对所有相等的对象进行更改。你知道这是否有模式吗?

我的具体用例是:我正在使用 JSF、JPA 和 CDI。用户在允许他编辑分离实体 EntityA 的网页上。该页面是 session 范围的。 EntityA 有两个对 EntityB 的引用(也是分离的)。这些对象可以相同。不同的引用,但它们可能相同。

@Entity
public class EntityA {
@OneToOne()
private EntityB entity1;
@OneToOne();
private EntityB entity2;
}

JSF View 允许用户从选择列表中选择实体 1 和实体 2。它还显示了这些 EntityB 的一些细节,并且允许用户分别编辑 entity1 和 entity2。一切正常,除了用户为 entity1 和 entity2 选择了相同(相等)的 EntityB。然后,只更新对这些对象的引用。当然 entity1 和 entity2 是两个不同的 JPA 实体,并且不是相同的引用。但我想将更改分发到 EntityB 的所有分离实例。我的应用程序中有数百次这种情况,所以我不想关心在哪些情况下必须更新哪些对象。我需要一些解决方案,它会自动为我完成。一个想法是将我在此 session 中使用的所有对象保存在特殊列表中,并且每次提交和处理请求时迭代此映射并更改所有相等的对象。但他的声音很脏。也许有一个内置的 JPA 函数可以使所有相等的对象成为相同的引用。我不知道这是否可能。你有解决办法吗?谢谢。

最佳答案

我将在这里稍微抽象一下您的问题:如果对一个对象的更改需要更改许多其他对象,请考虑将您要更改的字段放在一个单独的对象中,并让所有这些对象引用

例如,如果您有:

class MyClass {
String info;
int id;
}

当“信息”字段发生变化时,两个具有相同“id”的 MyClass 实例都应该更新,然后使用:

class myClass {
myInfoClass info;
int id
}

class myInfoClass {
String value;
}

并为 myClass 的所有实例提供相同的 myInfoClass 实例。更改 myClass.info.value 将有效地更改 myClass 的所有实例,因为它们都包含相同的 myInfoClass 实例。

抱歉,如果我的语法有点错误,我经常在不同语言之间跳转。

我在最近编写的一个游戏中使用了这种技术,其中开关激活门 - 开关和门都有一个 Circuit 对象,该对象包含一个 boolean 型 powered 字段。门的“isOpen()”方法仅返回 circuit.powered,当开关被激活时,我只需调用 switch.circuit.powered = true,门就会自动打开被认为是“开放的”。之前,我让它在游戏 map 中搜索具有相同电路 ID 的所有门,并更改每个门上的 powered 字段。

关于Java:用于更新不共享相同引用的所有相等对象(在相同上下文中)的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13915429/

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