Подтвердить что ты не робот

Почему усиление для цикла не выполняет нулевую проверку

Почему цикл с расширенным циклом не выполняет проверку нуля перед итерацией по коллекции.

4b9b3361

Ответ 1

Если вы имеете в виду, что это пойдет ударом:

int[] array = null;
for (int x : array) {
}

... тогда я думаю, что для этого совершенно необходимо выбросить NullPointerException. Альтернативой было бы просто усвоить нуль и рассматривать это как эквивалентное пустому массиву. Это не тот подход, который принимает Java где-то еще - почему это должно быть иначе? Это сделало бы язык непоследовательным.

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

Ответ 2

Я как бы боюсь утверждать против Джона Скита...: |... Но что, черт возьми... что вы думаете об этом сценарии?:

`

findMoney(List<Places> places){
   int money = 0;
   for(Place place : places){
   money += searchWithCare(place);
   }
return money;
}

`

Если я попрошу какого-нибудь клиента сказать мне, где искать, и он ничего мне не говорит. Считаете ли вы, что лучше здесь бросать исключение NullPointerException? Может ли управлять вызовом этого метода, поэтому, если параметр null, не называть его?.... Я думаю, что return 0 является последовательным ответом, потому что здесь нет ошибки. Я считаю, что исключения сделаны для управления потоком кода, и я не понимаю, почему я должен менять поток в такой ситуации. Возвращение cero или даже null может быть хорошим ответом, не может быть?

А как насчет этого решения? `

findMoney(List<Places> places){
   int money = 0;
   for(Place place : places == null ?Collections.<Place>emptyList():places){
   money += searchWithCare(place);
   }
return money;
}

`

Ответ 3

Код должен быть таким:

for (AnyObject anyObject : checkIsEmpty(anyObjectList)) {
        System.out.println(anyObject.doSomething());
}

private <T> Iterable<T> checkIsEmpty(Iterable<T> iterable) {
        return iterable == null ? Collections.<T>emptyList() : iterable;
}