首页 > 解决方案 > 我应该如何在没有警告的情况下运行 2 个对象的代码

问题描述

我想为这两个对象做 doStuff(),所以我这样做:

   for (XYChart.Series<String, Number> series : new XYChart.Series[]{firstSeries, secondSeries}) {
       series.doStuff();
   }

但这给了我一个警告:

Unchecked assignment: 'javafx.scene.XYChart.Series' to 'javafx.scene.XYChart.Series'

我应该如何实际执行 for 循环?

标签: javatemplatesgenericstypes

解决方案


数组和泛型不能很好地协同工作。你的数组没有类型参数(而且,真的,不能有它们),所以<String, Number>部分?编译器试图告诉你:嗯,嗯....好吧,伙计。如果你这么说。我不会检查这个,如果你弄错了,ClassCastException这个代码中会在奇怪的地方出现错误——在任何地方都看不到强制转换操作的地方。

解决方案是不要混合使用数组和泛型。鉴于泛型在 Java 中无处不在,这主要意味着您不应该在 Java 代码中使用数组(无论如何不要轻易使用;它们有自己的位置,尤其是数组或原语)。例如,这很好用:

XYChart.Series<String, Number> firstSeries = ..., secondSeries = ...;
for (XYChart.Series<String, Number> series : List.of(firstSeries, secondSeries)) {
   ...
}

推荐阅读