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

时间:2019-06-20 09:36:33

标签: java parameter-passing subclass args

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

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

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

3 个答案:

答案 0 :(得分:4)

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

做出了选择,方法签名应该以它们的方式工作。为了支持此功能,它的设计可能有所不同(例如golang确实如此)。

但这就是Java的方式,并且似乎不太可能对其进行更改以支持Java。

答案 1 :(得分:3)

这是Java设计要求。

由于Java是一种强类型语言,因此您必须定义每个变量的类型。

声明字符串(或其他)时,可以仅使用一个类型声明来设置多个变量。

String a,b; 

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

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

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


参数数量可变的函数有一个例外情况

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

答案 2 :(得分:2)

您无法以所需的方式使用它。

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

示例:

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