我想通过对两个可能的对象(在这种情况下为JavaFX Chart
对象)使用相同的变量名来减少代码。原因是因为在for loop
之后,对图表的某些处理发生的情况完全相同。
我试图向下推广图表,但它给了我一个"未知的类"错误。
Chart chart;
if (chartClass.equals(LineChart.class))
chart = new LineChart<Number, Number>(xAxis, yAxis);
else
chart = new AreaChart<Number, Number>(xAxis, yAxis);
for (int i = 0; i < variablesToPlot.length; i++) {
series[i] = new LineChart.Series<Number, Number>();
// this chart must be LineChart or AreaChart (but not general chart) for getData() to work
((chartClass) chart).getData().add(series[i]);
}
// here some chart processing that is equal for both charts
我正在寻找类似动态类型的声音(据我所知,Java无法解决这个问题),但除了编写代码两次之外,有没有办法解决这个问题?
答案 0 :(得分:2)
将Chart chart
的声明更改为XYChart chart
。
LineChart和AreaChart的常见超类是XYChart。
然后,您就可以将其投放到XYChart
并在其上使用getData
方法。
这将导致:
XYChart chart;
if (chartClass.equals(LineChart.class))
chart = new LineChart<Number, Number>(xAxis, yAxis);
else
chart = new AreaChart<Number, Number>(xAxis, yAxis);
for (int i = 0; i < variablesToPlot.length; i++) {
series[i] = new LineChart.Series<Number, Number>();
// this chart must be LineChart or AreaChart (but not general chart) for getData() to work
chart.getData().add(series[i]);
}