将对象向下转换为未知 class

Downcast object to unknown class

我想通过对两个可能的对象(在本例中为 JavaFX Chart 对象)使用相同的变量名来减少代码。这样做的原因是因为在此之后 for loop 对图表的一些处理是相同的。

我尝试向下转换图表,但出现 "unknown class" 错误。

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 无法实现),但是除了两次编写代码之外,还有其他方法可以解决这个问题吗?

Chart chart 的声明更改为 XYChart chart

LineChart and AreaChart is 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]);  
}