我正在当地一所社区学院选修一门数据结构和算法课程。这门课程的教科书是丹尼尔·梁的Java编程导论,第10版。这本书本身是相当坚实的。
在处理Java.util.Arrays时,梁提到了Java的“可变长度”参数。他写道(第265页):
Java将可变长度参数视为数组。可以将数组或可变数量的参数传递给可变长度参数。当调用具有可变参数数的方法时,Java会创建一个数组并将参数传递给它。
一个例子是:
public static void (int... toes) {
//... some code
}然而,梁从来没有解释过变长参数的起源和优势.如果,正如梁所说,变长参数被“转换”为数组,它们的优势是什么?是否有由可变长度参数促进的软件设计模式或工程目标?
换句话说,下面没有提供的代码片段提供了什么:
public static void (int[] toes) { // ...发布于 2015-08-30 19:32:57
在Java中,varargs是在调用方法时创建数组的语法糖。例如,这两个调用是等价的:
void foo(String... args) { ... }
foo("hello", null, "world", xyz); // Java 1.5+
foo(new String[]{"hello", null, "world", xyz}); // All versions of JavaVarargs没有使任何新的可能性(根据语法糖的定义),但它减少了冗长,并使一些构造更易于实现。例如,我最喜欢的vararg用法包括:PrintStream.printf()、String.format()、Method.invoke()。
varargs的其他良好应用:
// This one is in the Java standard library
Collections: void addAll(Collection<? super T> c, T... elements);
// Custom examples
int max(int... nums);
void doOperation(File x, String y, SomeEnum options...);此外,Java的varargs使语言与C、Python、JavaScript和其他语言中的vararg支持保持一致。因此,如果经常重复的设计(如max())对varargs最有效,那么Java不再是需要更丑的实现的奇怪语言。
发布于 2015-08-30 19:19:41
“.”您正在讨论的参数称为瓦拉格。
需要注意的一些差异:
最后参数类型之后的三个句点表明,最终参数可以作为数组传递或作为参数序列传递。
来源
例如,这个方法:
public void myMethod(String... args) {}可以使用以下任何一种方法调用:
String[] myStrings = {"a", "b", "c"};
myMethod(myStrings);
myMethod("a", "b", "c");有关何时使用varargs的良好解释,请参见这。
https://stackoverflow.com/questions/32300100
复制相似问题