Почему нам нужно дважды определять переменные, передаваемые из main в методы? - PullRequest
0 голосов
/ 05 октября 2018

Возьмите следующий код:

public static void print(ArrayList<String> list) {
    for (String word : list) {
        System.out.println( word );
    }
}

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("Java");
    list.add("Python");
    list.add("Ruby");
    list.add("C++");

    print(list);
}

Почему нам нужно определить 'список' как ArrayList в main, а затем снова определить его в параметрах метода?Почему нельзя передать тип переменной из основного в метод?Есть ли способ сделать это?Какие-нибудь примеры, в которых вы бы хотели, чтобы тип менялся между основным и методом?

Такое чувство, что вам приходится без необходимости делать один и тот же шаг дважды.

Например, почему мы не можем простоиспользование:

public static void print(list) {
    for (String word : list) {
        System.out.println( word );
    }
}

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("Java");
    list.add("Python");
    list.add("Ruby");
    list.add("C++");

    print(list);
}

Ответы [ 4 ]

0 голосов
/ 05 октября 2018

Java - это строго типизированный язык программирования.Посетите https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html для получения дополнительной информации.Вы можете передать только имя без типа в языке, таком как JavaScript в Java, вам нужно написать тип (конкретное слово: boolean, int, double, ...) и затем nameOfParameter.

0 голосов
/ 05 октября 2018

Что такое list?

public static void print(list) {
    for (String word : list) {
        System.out.println( word );
    }
}

В контексте объектно-ориентированного программирования предположим, что внешний класс хотел использовать этот метод.Что бы это здесь произошло?Что может пройти здесь?Откуда он это знает?

По сути, вы зациклены на разнице между переменными и параметрами .Оба должны быть должны быть типизированы, так как Java является строго типизированным языком, но ни один из них не обязательно связан друг с другом.У вас может быть параметр, который называется так же, как и переменная, которую вы объявляете позже для удобства чтения, но для этого нигде не установлено никакого мандата.

Чтобы прояснить это, вот тот же метод снова:

public static void print(ArrayList<String> l) {
    for (String word : l) {
        System.out.println( word );
    }
}

Неважно, как назван ваш параметр , если он напечатан .

0 голосов
/ 05 октября 2018

Java - языки со строгой и статической типизацией, и она требует от вас объявить тип, который принимает метод.Если вы не хотите, чтобы метод принимал любой тип списка, вы можете сделать это:

// this method can accept an ArrayList, LinkedList, etc
public static void print(List<String> list) {
    for (String word : list) {
        System.out.println( word );
    }
}

public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<String>();
    list.add("Java");
    list.add("Python");
    list.add("Ruby");
    list.add("C++");

    print(list);
}
0 голосов
/ 05 октября 2018

Вам необходимо указать тип в списке параметров, чтобы можно было проверить передаваемый тип.

В этом примере вы можете сказать: «Ну, я звоню только один раз и передаю одинсписок, так что очевидно, что тип должен быть ".Что происходит, когда он вызывается из нескольких мест, когда передаются разные объекты?Средство проверки типа должно знать, какого типа ожидает функция, чтобы она могла выдавать ошибки времени компиляции, когда предоставляется неправильный тип объекта, и проверять, что методы, используемые в переданном объекте, являются допустимыми для этого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...