2

这编译得很好:-

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 写道 :- 它实际上只是一个数组的语法糖

这是一个示例,后面是Kathy Sierra 和 Bert Bates编写的一本非常流行的 Java 书籍(Head First Java,第 2 版,McGraw-Hill/Osborne)的声明 :-

主题泛型,

<T extends MyClass>,其中 MyClass 是一个类,并且

<T extends MyInterface>,其中 MyInterface 是一个接口。

以下是从书中复制的原样(第 548 页,第 16 章):-

在泛型中,“扩展意味着”“扩展或实现”???Java 工程师必须给您一种方法来对参数化类型施加约束,以便您可以将其限制为。但是您还需要约束一个类型以仅允许实现特定接口的类。因此,在这种情况下,我们需要一种语法来同时适用于两种情况——继承和实现。换句话说,这适用于扩展和实现。获胜的词是......扩展。每当太阳工程师有机会重用现有关键字时,就像他们在这里使用“扩展”所做的那样,他们通常会这样做。但有时他们别无选择......(断言,枚举)。

MyQuestion : var-args 只是数组的语法糖,没有其他功能然后数组???

4

2 回答 2

3

是的,可变参数仅适用于函数参数。

它实际上只是数组的语法糖,而不是:

String... strVarArgs ;

你要

String strVarArgs[];
于 2009-10-03T17:54:01.097 回答
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 参数的情况下调用方法。如果没有传递可变参数,则它为空。

不需要另一种变量声明方式,因此不使用它。这就是您收到编译时错误的原因。

于 2009-10-03T18:24:25.320 回答