编译正常: -
public class Demo {
public static void main(String... args) {
}
}
但这不会被编译。
public class Demo {
public static void main(String... args) {
String... strVarArgs ;
//here i initiallize strVarArgs by some logic, like we do for arrays
}
}
如果我在语法上错了,请告诉我。的: - )
cletus写道: - 它实际上只是数组的语法糖
这是一个例子,后面是一本非常受欢迎的java书籍的声明 Kathy Sierra和Bert Bates(Head First Java,第2版,McGraw-Hill / Osborne): -
主题泛型,
<T extends MyClass>
,其中MyClass是一个类,
<T extends MyInterface>
,其中MyInterface是一个接口。
以下是书中的副本(第548页,第16章): -
在泛型中,“扩展手段”“扩展或实现”??? java工程师必须给你一种方法来对参数化类型设置约束,以便你可以将其限制为。但是您还需要约束类型以仅允许实现特定接口的类。所以,在这种情况下,我们需要一种语法来处理这两种情况 - 继承和实现。换句话说,这适用于扩展和实现。 获胜的词是......延伸。 每当太阳工程师有机会重复使用现有关键字时,就像他们在这里使用“扩展”一样,他们通常会这样做。但有时候他们没有选择......(断言,枚举)。
MyQuestion:var-args只是一个数组的语法糖,没有其他功能那么数组???
答案 0 :(得分:3)
是的,varargs仅适用于函数参数。
它实际上只是数组的语法糖而不是:
String... strVarArgs ;
你想要
String strVarArgs[];
答案 1 :(得分:1)
示例:
public class VargArgsExample {
public static void printArgs(long requiredLongArgument, String... notRequiredStringArray) {
System.out.println(requiredLongArgument);
if (notRequiredStringArray != null) {
for(String arg: notRequiredStringArray) {
System.out.println(arg);
}
}
}
public static void main(String[] args) {
printArgs(1L);
printArgs(1L, "aa");
printArgs(1L, "aa", "bb");
}
}
正如你可以看到这个语法糖允许我们调用方法而不指定varargs参数。如果没有传递vararg参数,则它为null。
不需要另一种变量声明方式,所以它不用于它。这就是你得到编译时错误的原因。