Java未经检查:varargs参数的未经检查的通用数组创建

Java未经检查:varargs参数的未经检查的通用数组创建,第1张

Java未经检查:varargs参数的未经检查的通用数组创建

如上面的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方法确实使用了数组的运行时类型。在这种情况下,这可能是不安全的。这就是为什么出现警告的原因。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5560684.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存