为什么我不能使用(String arg,arg2)而不是(String arg,String arg2)作为我的方法?



我可以在子类中使用此代码将两个值传递给方法:

try
{
    echo(args[0], args[1]);
}
catch (Exception e)
{
    System.out.println("Argument required");
}

以及超类中的这段代码:

public static void echo(String arg, String arg2)
{
    try
    {
        System.out.println("You entered: " + arg + " and " + arg2);
    }
    catch (Exception e)
    {
        System.out.println("Argument required");
    }

我的问题是为什么我必须通过键入字符串两次来声明字符串变量 arg 和 arg2?它们都是字符串类型,所以我不能只写(字符串 arg,arg2(?

你就是不能。这就是语言的设计方式。

已选择方法签名应按其方式工作。它本可以采用不同的设计来支持这一点(例如,golang 确实如此(。

但Java就是这样,而且似乎不太可能改变它来支持它。

这是一个 Java 设计要求。

因为Java是一种强类型语言,你必须定义每个变量的类型。

当您声明 String (或其他内容(时,您可以使用只有一个类型声明设置多个变量。

String a,b; 

但是在方法中,参数可以是不同类型的

void myFunction(String a, Integer b, [etc...])

因此,您必须为参数指定每种类型。


参数数量可变的函数例外

void myFunction(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

你不能以你想要的方式使用它。

您可以使用变量参数(Varargs( - (应该在您的方法的参数中声明为最后(

例:

public static void echo(String... args) {
    System.out.println("You entered: " + args[0] + " and " + args[1]);
}

最新更新