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

Java varargs方法参数列表与数组

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

Java varargs方法参数列表与数组

数组从Java的开始就出现了,而varargs是最近才添加的。因此,许多旧代码仍然很高兴地使用数组。

还要注意,使用显式数组参数调用通用vararg方法可能会静默地产生与预期不同的行为:

public <T> void foo(T... params) { ... }int[] arr = {1, 2, 3};foo(arr); // passes an int[][] array containing a single int[] element

因此,除了需要大量的工作并没有明显的好处之外,用varargs替换遗留数组参数并不总是可取的。

更不用说您不能这样做的情况,因为方法参数列表中的数组后面还有另一个参数:

public void foo(String[] strings, String anotherParam) { ... }

重新排序参数可以从技术上解决此问题,但是这会破坏客户端代码。

更新: 有效的Java 2nd。Edition,条款42: 明智地使用varargs
进行了详细说明,并给出了一个具体示例:

Arrays.asList()
在Java5中进行了改装以具有vararg参数,使用此(现在已过时)惯用法打印时,
无意中破坏了很多现有代码 可能会导致意外数组:

System.out.println(Arrays.asList(myArray));

Update2: 仔细检查了源,并说原始类型的数组(例如)出现了问题

int[]
。在varargs之前,代码如下:

int[] digits = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 4 };System.out.println(Arrays.asList(digits));

会产生编译错误,因为只有引用类型的数组可以转换为

List
。由于使用了varargs并进行了改造
asList
,因此上面的代码在编译时不会发出警告,并且意外的结果类似于
"[[I@3e25a5]"



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

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

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