问题描述
|
我来自C(++)背景,对Java的主要兴趣是Android开发。对我来说,这似乎是一个显而易见的问题,但我还没有发现它在任何地方都可以解决(而且我确实搜索了stackoverflow并对其进行了搜索)。我确实发现了很多评论,例如:
public String foo(String key,Object[] parameters) {..}
and
public String foo(String key,Object... parameters) {..}
are equal
实际上,\“ Varargs \”的Java文档明确声明\“最终参数类型之后的三个句点表示最终参数可以作为数组或参数序列传递\”
来自同一消息来源的最经常说明的理由是,varargs具有“核心API中的重要用途,包括反射,消息格式和新的printf工具。”
鉴于Java是面向对象的,包括垃圾回收并支持动态数组,并且Java varargs被限制为单一类型,优点是什么? (与之相反,例如,C实现了附加功能。)
解决方法
使用方便。仅此而已。
printf( \"...\",x,y,z );
相当于
printf( \"...\",new String[] { x,z } );
除非它更容易写和读。
,在varargs之前:
log.debug( \"foo is \" + foo + \",bar is \" + bar );
在varargs之后:
log.debug( \"foo is %s,bar is %s\",foo,bar );
第二版效率更高。