【问题标题】:Should I have two different variables in one class that represent almost the same thing我应该在一个类中有两个不同的变量代表几乎相同的东西吗
【发布时间】:2011-10-26 17:51:18
【问题描述】:

起初,我有一个类 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的所有元素?

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

  • 还是别的什么?

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

【问题讨论】:

  • 如果我理解.. C 不应该从 A 继承吗?
  • 你能提供一个代码示例吗? :P

标签: java variables state


【解决方案1】:

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

但是,如果您还需要原始数据,则 A 类可以保留两者。如果你知道列表 B 和列表 C 中哪些信息是相同的,你可以给列表 C 的实例一个对列表 B 的引用,这样它只需要存储不同的信息,并且可以引用列表中的信息当要求一些没有改变的东西时列出 B。

【讨论】:

    【解决方案2】:

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

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

    它是 B 对象的副本,还是对原始对象(或其他)的复合引用,取决于您的实际需求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-26
      • 1970-01-01
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 1970-01-01
      相关资源
      最近更新 更多