我是清理代码/重构的新手,我学会了避免像下面这样的长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;
}
}
4条答案
按热度按时间7tofc5zh1#
该代码最大的问题是缺乏类型安全性。此方法只能使用4个特定字符串,但可以接受任何字符串,而不会向其调用方提供接受哪些字符串的任何线索,也不会在调用方提供错误字符串时向其提供任何反馈。
一种改进的方法是改用枚举。这还允许您在枚举本身中存储有关值的其他数据:
然后,计算数据点数量的方法可以变成:
f2uvfpb92#
我会这样写。
或者,如果periodvalue和numberofdatapoints后面隐藏了一些公式,我会在构造函数或方法中编写该公式。
dfty9e193#
也许这将帮助您开始创建一个基图类,所有其他图形类型都可以扩展它。以及基于传入的给定字符串生成图形对象的工厂类。
然后您可以创建一个工厂对象,并为它指定特定的字符串来创建所需的图形对象
kxxlusnw4#
您不需要多态性,只需使用一个结合了这两个值的类和一个Map就可以省略switch语句。
然后建立Map
使用Map
此方法比使用枚举更灵活。默认情况也更容易测试。我认为
GraphType
不是枚举。枚举是一组不太可能更改的固定名称,如norh、south、east、west或hour、minutes、seconds。如果你想确保
GraphType
如果您希望存在并且不能示例化其他对象,请实现如下注册表: