【问题标题】:Java Class: I need to add a new field of type String to a class. Should I extend (create a new derived class) or simply add the new field?Java 类:我需要向一个类添加一个 String 类型的新字段。我应该扩展(创建一个新的派生类)还是简单地添加新字段?
【发布时间】:2016-08-19 05:10:05
【问题描述】:

我想了解这方面的最佳做法。我有一堂有一些领域的课。现在我需要添加一个字符串类型的新字段。

该类的大多数实例不需要这个新的 String 字段,因此不会为这些实例设置它。某些实例会设置此字段。

那么我应该创建一个新的子类并将后面的实例创建为这个子类吗?请说明原因。

【问题讨论】:

  • 谁需要访问这个新字段,是否有访问限制,是否由于成员和/或其影响类的操作而存在行为差异,这些是决定您是否需要的一些关键问题需要一个子类或添加一个新成员
  • 如果您添加了一个具体示例(代码)来解释您要做什么,这将很有用。
  • 假设我有一个 Car 类,它曾经有 String 字段 model 和 yearManufactured。现在我想添加一个新的字符串字段颜色。某些实例不会设置此新字段。
  • 请使用具体的例子而不是“假设我们有一辆车”——这没有任何意义,因为每辆汽车都有颜色,而且可能离我们很远你原来的问题。

标签: java class oop object-oriented-analysis


【解决方案1】:

案例:您想将String color 添加到Car,但它不会用于许多用途。

我不会在这里创建子类,而是添加:

Optional<String> color = Optional.empty();

原因:

  • (正式)它是 has-a 关系,而不是 is-a。
  • 它不会改变现有部分的业务逻辑
  • 它的影响最小。

因为我不喜欢null,要么在"" 上初始化,要么使用Optional

【讨论】:

    【解决方案2】:

    您的问题的答案取决于很多因素(系统是否处于生产状态、系统的复杂程度等),因此答案不止一个。

    但是当我阅读你的问题时,我提到了一些似乎是常见错误“该类的大多数实例不需要这个新的字符串字段”

    请记住,此语句是代码异味。因为您向不需要的对象“添加”了额外的知识。对这个类进行更多抽象是解决这个问题的唯一方法。

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多