Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 变量args是否只能用作方法参数?_Java_Variadic Functions - Fatal编程技术网

Java 变量args是否只能用作方法参数?

Java 变量args是否只能用作方法参数?,java,variadic-functions,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, lik

这很好:-

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
    }
}
如果我语法错误,请纠正我:-)


克莱特斯写道:- 它实际上只是数组的语法糖

下面是一个示例,后面是由 凯西·塞拉(Kathy Sierra)和伯特·贝茨(第一爪哇大学校长,第二版,麦格劳·希尔/奥斯本):-

主题泛型

,其中MyClass是一个类,以及

,其中MyInterface是一个接口

以下是本书的原稿(第548页,第16章):-

在泛型中,“扩展”表示“扩展或实现”??? java工程师必须为您提供一种方法来对参数化类型进行约束,以便您可以将其限制为。但您还需要约束类型,以便只允许实现特定接口的类。因此,在这种情况下,我们需要一种语法来处理继承和实现两种情况。换句话说,这适用于扩展和实现获胜的词是……扩展。 每当sun工程师有机会重用现有关键字时,就像他们在这里使用“扩展”时所做的那样,他们通常都会这样做。但有时他们没有选择……(断言,枚举)。


我的问题:var-args只是数组的一个语法糖,没有数组的其他功能吗?

是的,varargs只适用于函数参数

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

String... strVarArgs ;
你想要

String strVarArgs[];
例如:

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");
}
}

正如您所看到的,sugar语法允许我们在不指定varargs参数的情况下调用方法。如果没有传递vararg参数,则该参数为null


不需要以另一种方式声明变量,因此不使用它。这就是为什么会出现编译时错误。

我认为最好将类型信息保存在一个地方:
String[]strvargs
我希望它们没有包含这种语法:(它的String[]args[];这真的很难理解(是的,这是合法的Java语法)。最近我了解到你甚至可以将[]对于方法参数列表后的返回类型。幸运的是,我还没有在野外看到。我问这个问题是因为我真的不知道。如何通知加入我的查询的用户,如果我进行编辑,bcoz对于回答问题的每个用户只有一个添加注释。注释是否也会通知正在注释的用户在其他用户答案上。Vaargs会导致问题,因此默认情况下您可能不应该使用它。当然,使用for
main
是没有帮助的。thnx。非常感谢为编辑提供任何好的参考。:)我不明白关于
扩展的
关键字的材料与原始问题有什么关系。