我应该在一个类中有两个不同的变量代表几乎相同的东西

时间:2011-10-26 17:51:19

标签: java variables state

起初我有一个A类,它将列表B作为构造函数参数。该列表B在变量中保存在A类中。使用此类A的另一个类需要列表B中的数据,但是以不同的方式。所以我创建了一个特定的对象C,并在A类中有一个getSomething()方法,它根据原始列表B中的信息动态创建其中一个对象C.这很好。

然后事实证明,调用getSomething()的类需要一些原始列表B不包含的额外信息。然而,对列表B中的特定元素的小计算给了我这些信息。这些信息需要添加到对象C中。这个计算有点重,所以当我在getSomething()中创建对象C时,我不想动态地执行此操作。这给了我一个问题,因为我不能用这个计算的信息更新对象C的任何元素,因为对象C的元素还不存在,它们是在getSomething()中创建的。

我应该如何以最佳方式解决这个问题。可能有任何模式吗?

  • 我是否在A类的构造函数中将列表B中的元素转换为对象C的列表然后丢弃列表B,然后执行计算并更新对象C的所有元素?

    < / LI>
  • 我是否保留原始列表B和对象C列表,并且两个变量具有几乎相同的信息,只是以不同的方式呈现?

  • 还是其他什么?

编辑:C不是列表B中元素的扩展,更多的是列表B中的一个或多个元素组合成C。

2 个答案:

答案 0 :(得分:0)

如果您可以对列表B进行调整以创建列表C而不会丢失A类所需的信息(换句话说,如果A类只能使用列表C可以正常运行)那么是,在构造函数中计算它并且不保留B似乎是个好主意。

但是,如果您需要原始数据,A类可以保留两者。如果你知道列表B和列表C中哪些信息是相同的,你可以给列表C的实例一个对列表B的引用,这样它只需要存储不同的信息,并且可以参考中的信息。列表B在被请求的情况下没有改变。

答案 1 :(得分:0)

解释可能比实际问题更令人困惑。

AFAICT你想要一个装饰B,其中装饰列表是在A的构造函数中计算的。

是否是B对象的副本,或者对原件(或其他内容)的复合引用取决于您的实际需求。