如上面的janoh.janoh所述,Java中的varargs只是数组的语法糖,以及在调用站点处隐式创建数组。所以
List<List<String>> combinations = Utils.createCombinations(cocNumbers, vatNumbers, ibans);
实际上是
List<List<String>> combinations = Utils.createCombinations(new List<String>[]{cocNumbers, vatNumbers, ibans});
但是,您可能知道,
newList<String>[]Java不允许这样做,原因是许多其他问题已经涵盖了这些原因,但主要与以下事实有关:数组在运行时知道其组件类型,并在运行时检查添加的元素是否与其组件匹配类型,但无法对参数化类型进行此检查。
无论如何,编译器仍然会创建数组,而不是失败。它执行以下 *** 作:
List<List<String>> combinations = Utils.createCombinations((List<String>[])new List<?>[]{cocNumbers, vatNumbers, ibans});
这可能是不安全的,但不一定是不安全的。大多数varargs方法只是迭代varargs元素并读取它们。在这种情况下,它并不关心数组的运行时类型。您的方法就是这种情况。由于您使用的是Java
7,因此应将
@SafeVarargs注释添加到方法中,并且不再收到此警告。这个注释基本上说,这种方法只关心元素的类型,而不关心数组的类型。
但是,有一些varargs方法确实使用了数组的运行时类型。在这种情况下,这可能是不安全的。这就是为什么出现警告的原因。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)