【问题标题】:Why can't I use (String arg, arg2) instead of (String arg, String arg2) for my method?为什么我的方法不能使用 (String arg, arg2) 而不是 (String arg, String arg2)?
【发布时间】:2019-06-20 09:36:33
【问题描述】:

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

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) 吗?

【问题讨论】:

  • 你可以有一种语言允许这样做,但是 1) Java 不是这样的语言; 2)我知道很多静态类型的语言,想不出有什么。

标签: java parameter-passing subclass args


【解决方案1】:

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

选择了方法签名应该按照它们的方式工作。它可以设计不同的方式来支持这一点(例如,golang 支持)。

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

【讨论】:

    【解决方案2】:

    这是 Java 设计要求。

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

    当你声明一个字符串(或其他东西)时,你可以只用一个类型声明来设置多个变量。

    String a,b; 
    

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

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

    所以你必须为参数指定每种类型。


    参数个数不定的函数有一个例外

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

    【讨论】:

    • 如果是“要求”,那么强类型语言如何做到这一点?
    【解决方案3】:

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

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

    例子:

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

    【讨论】:

    • 请注意,可变参数应在方法的参数中最后声明
    • 不,这不一样。这允许您传递零个或多个字符串,而不是两个。
    猜你喜欢
    • 2012-09-04
    • 2020-02-27
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多