var-args只能用作方法参数吗?

时间:2009-10-03 17:52:00

标签: java variadic-functions

编译正常: -

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只是一个数组的语法糖,没有其他功能那么数组???

2 个答案:

答案 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。

不需要另一种变量声明方式,所以它不用于它。这就是你得到编译时错误的原因。