向下未知类的向下对象

时间:2015-01-11 12:20:57

标签: java oop casting javafx

我想通过对两个可能的对象(在这种情况下为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无法解决这个问题),但除了编写代码两次之外,有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

Chart chart的声明更改为XYChart chart

LineChartAreaChart的常见超类是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]);  
}