将对象向下转换为未知 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]);
}
我想通过对两个可能的对象(在本例中为 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]);
}