现在,如果我使用 changeState(State.NOT_ACTIVE) ,它将更改 SomeObjects 和列表中所有对象的状态,还是仅更改 SomeObjects 中的状态?
我不完全确定你的想法是什么。
如果你打电话changeState(NOT_ACTIVE)
在某些实例上SomeObjects
,然后根据方法的定义,它将设置该对象的state
领域是NOT_ACTIVE
。这个单个方法调用不可能更改多个对象,因为它对单个变量执行单个赋值。
如果仅在 SomeObjects 中,我应该如何使用changeState() 更改列表中所有对象的状态?
如果你想要changeState
方法将状态应用于包含在其中的所有对象objects
字段,那么你可以用一个简单的循环让它做到这一点:
public void changeState(State state) {
this.state = state;
for (SomeObject obj : objects) {
obj.state = state;
}
}
在这种情况下,创建包含该枚举的类是唯一的方法吗?
我再次不清楚你在这里到底在想什么。你不想设置state
所有的价值SomeObject
包含在一个实例中SomeObjects
实例?也就是说,在已经存在的实例上设置值,已经定义的类?
如果是这样,则可以通过在循环中设置值来完成上述操作。该字段是一个枚举这一事实并没有什么区别;任何原始类型或引用类型在这里的行为都是相同的。
编辑回答评论:啊,听起来根本问题是首先使用了一个字段。
鉴于您想要的所有内容objects
集合始终具有完全相同的状态,它们都拥有一个单独的状态可能是错误的state
场地。这是一个建模错误,因为SomeObject
实例没有really独立地保持/控制自己的状态。
我之前要建议的是你应该实施methods而不是直接访问字段——这就是现在引人注目的事情。而不是SomeObject
有一个state
field,它应该有一个getState()
method。对于给定的实例,您有办法获取其当前状态 - 但这不一定实现为直接对象引用。
而这个方法的实现应该只是获取包装的状态SomeObjects
实例(这不是一个信息特别丰富的类名)。因此可以按如下方式实现:
public class SomeObject {
private final SomeObjects parent;
public SomeObject(SomeObjects parent) {
this.parent = parent;
}
public State getState() {
return parent.state; // Ideally accessed via method too
}
}
这与我对你的设计的理解是一致的——每个SomeObject
与其包装具有相同的状态SomeObjects
(因此隐含地必须有一个父母SomeObjects
始终定义的实例)。上面的代码几乎是该设计的精确表示。
(这里的枚举仍然没有什么特别的;如果你返回,事情会以相同的方式工作int
or String
or Map<MyFoo, Set<Future<ResultSet>>
.)