我应该对简单的 switch 语句使用多态性吗?

Cur*_*der 5 java polymorphism refactoring code-cleanup switch-statement

我是清理代码/重构的新手,我学会了避免像下面这样的长 switch 语句。我发现多态性是一种有助于缩短复杂 switch 语句的技术。对于这个简单的 switch 语句来说,多态性是一个好主意吗?

String periodValue;
int numberOfDataPoints;

getNumberOfDataPoints(String selectedGraphType) {
    switch (selectedGraphType) {
      case "1D": 
        {
          periodValue = "300";
          numberOfDataPoints = 289; 
        }
        break;
      case "5D": 
        {
          periodValue = "1800";
          numberOfDataPoints = 241;
        }
        break;
      case "1M": 
        {
          periodValue = "86400";
          numberOfDataPoints = 31;
        }
        break;
      case "1Y": 
        {
          periodValue = "259200";
          numberOfDataPoints = 123;
        }
        break;
  }
Run Code Online (Sandbox Code Playgroud)

}

mer*_*ike 1

该代码最大的问题是缺乏类型安全。此方法只能使用 4 个特定字符串,但接受任何字符串,而不向调用者提供任何线索接受哪些字符串,或者在调用者提供错误字符串时向调用者提供任何反馈。

改进这一点的一种方法是使用枚举。这还允许您在枚举本身中存储有关值的附加数据:

public enum GraphType {
  day(300),
  week(1800),
  month(86400),
  year(259200);

  public final int periodValue;

  GraphType(int periodValue) {
    this.periodValue = periodValue;
  }
}
Run Code Online (Sandbox Code Playgroud)

然后,计算数据点数量的方法可以变为:

getDataPoints(GraphType selectedGraphType) {
  int period = selectedGraphType.periodValue;
  // find datapoints depending on period
}
Run Code Online (Sandbox Code Playgroud)