我正在编写一个程序,在其中我将多个文件中的数据读入基于ArrayList<E>
的容器中,并将处理后的数据输出到线图上,以图形化数据的数值(y轴)。记录数据(x轴)。
我构建的三个关键类之一是基类DataPoint
,它对DataPoint
类对象进行大量数据处理和验证。
另一个是DataArrayList<T extends DataPoint>
从其超类ArrayList<E>
扩展而来。 DataArrayList
是一个接口(我认为我正确地使用了该单词),它对DataPoint
类对象进行排序,汇总和包含。
最后一个关键类,也是我一直在努力的关键类,HomeDataPoint
包含一个时间点的多个DataPoint
类对象,因此每个DataPoint
必须在彼此相同的指定时间段内。我一直在测试这个,指定的时间段是默认的一天(每个包含DataPoint
必须在同一天读取),但最终我觉得我当前的数据结构不够,因为我已创建,摧毁,重新定义,并无数次重建它们。也就是说,我已经尝试将包含的DataPoint
对象存储在ArrayLists,LinkedHashSets和单个DataPoint
对象中。在与泛型的交互,数据的封装以及输入的并行处理之间,我已经相当丢失了。
以下是HomeDataPoint
insert()
方法的代码,一个包含可能的传入DataPoint
类对象类型的枚举,以及它的成员变量的声明:
private enum DataType
{
WEATHER_CLASS(WeatherDataPoint.class),
ELECTRIC_CLASS(ElectricDataPoint.class), GAS_CLASS(GasDataPoint.class);
private final Class<? extends DataPoint> type;
DataType(Class<? extends DataPoint> type)
{
this.type = type;
}
public Class<? extends DataPoint> getType()
{
return type;
}
}
private DataArrayList<WeatherDataPoint> weatherLowPoints = null;
private DataArrayList<WeatherDataPoint> weatherHighPoints = null;
private DataArrayList<ElectricDataPoint> electricPoints = null;
private DataArrayList<GasDataPoint> gasPoints = null;
insert()
方法:
public boolean insert(DataPoint dataElement)
{
if (totalSize() > 0 && !getDate().substring(0, 10).equals(dataElement.getDate().substring(0, 10)))
{
return false;
}
else if (totalSize() == 0)
{
setDate(dataElement.getDate());
}
for (DataType type : DataType.values())
{
if (type.getType().equals(dataElement.getClass()))
{
switch (type)
{
case WEATHER_CLASS:
weatherLowPoints.add((WeatherDataPoint) dataElement);
weatherHighPoints.add((WeatherDataPoint) dataElement);
return true;
case ELECTRIC_CLASS:
electricPoints.add((ElectricDataPoint) dataElement);
return true;
case GAS_CLASS:
gasPoints.add((GasDataPoint) dataElement);
return true;
default:
return false;
}
}
}
return false;
}
答案 0 :(得分:0)
您应该为您的DataPoint类使用访问者模式,这样您就不必进行类型转换。
您只需拨打dataElement.accept(yourVisitor);
如果您认为需要进行的处理应该是Data Point类的一部分,您也可以直接使用多态: https://www.refactoring.com/catalog/replaceConditionalWithPolymorphism.html