Почему я не могу использовать (String arg, arg2) вместо (String arg, String arg2) для моего метода? - PullRequest
0 голосов
/ 20 июня 2019

Я могу передать два значения методу, используя этот код в подклассе:

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, дважды набрав String?Они оба типа String, поэтому я не могу просто написать (String arg, arg2)?

Ответы [ 3 ]

4 голосов
/ 20 июня 2019

Ты просто не можешь. Вот как был разработан язык.

Был сделан выбор, что сигнатуры методов должны работать так же, как и они. Он мог бы быть разработан по-другому для поддержки этого (например, golang делает).

Но именно такова Java, и кажется маловероятным, что она когда-либо будет изменена для ее поддержки.

3 голосов
/ 20 июня 2019

Это требование дизайна 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 голосов
/ 20 июня 2019

Вы не можете использовать его так, как хотите.

Вы можете использовать Аргументы переменных (Varargs) - (должны быть объявлены последними в аргументах вашего метода)

Пример:

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