栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569407.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号