字符串与新的数据类

sar*_*Fly 7 java types

我无意中听到两位同事争论是否要创建一个新的数据模型类,它只包含一个字符串字段,一个setter和一个getter.然后程序将创建该类的一些对象并将它们放入数组列表中.存储它们的人认为应该有一种新类型,而获取数据的人说,没有点可以解决所有这些麻烦,而你可以简单地存储字符串.

我个人更喜欢创建一个新类型,所以我们知道数组列表中存储了什么,但我没有强有力的论据来说服"获取"数据的人.你呢?

莎拉

Ste*_*n C 8

...一个新的数据模型类,它只包含一个字符串字段,一个setter和一个getter.

如果它只是一个getter,那么通常不能说String或自定义类是否更好.这取决于:

  • 与其他数据模型的一致性,
  • 期待您是否可能想要更改表示,
  • 预测在创建实例时是否需要实现验证,添加辅助方法等,
  • 对内存使用或持久性的影响(如果它们甚至相关).

(就个人而言,我倾向于默认使用普通的字符串,并且仅使用自定义类,例如,我知道可能需要未来的表示更改/细化.在大多数情况下,它不是以后将String更改为自定义类的巨大问题......如果需要的话.)

然而,有人建议成为该领域的制定者,这一事实将会发生重大变化.该类的实例将是可变的,而String的实例则不是.一方面,这可能是有用的; 例如,你真正需要可变性的地方.另一方面,可变性会使该类在某些情况下使用有些风险; 例如在集合中和作为地图中的键.在其他情况下,您可能需要复制实例.(对于不可变的包装类或裸String,这是不必要的.)

(简单的答案是摆脱二传手,除非你真的需要它.)

还有一个问题equals是String和自定义包装器的语义会有所不同.因此,您可能需要覆盖equalshashCode在自定义包装器案例中获得更直观的语义.(这与setter的问题有关,并且在集合中使用了类.)


小智 7

如果它与数据模型的其余部分相匹配,请将其包装在类中.

  • 它为您提供了字符串的标签,以便您可以在运行时告诉它代表什么.
  • 它使您可以更轻松地获取实体并添加其他字段和行为.(可能会发生这种情况>)

也就是说,关键是它是否与您数据模型的其余设计相匹配 ......与您已有的一致.