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)
}
该代码最大的问题是缺乏类型安全。此方法只能使用 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)