Пустой указатель регистрируется в расширенном для цикла

Что лучший способ состоит в том, чтобы принять меры против пустого указателя в для цикла в Java?

Это кажется ужасным:

if (someList != null) {
    for (Object object : someList) {
        // do whatever
    }
}

Или

if (someList == null) {
    return; // Or throw ex
}
for (Object object : someList) {
    // do whatever
}

Не могло бы быть никакого другого пути. Если они вставили его for создайте себя, если это является пустым, тогда не выполняют цикл?

164
задан fastcodejava 12 February 2010 в 06:25
поделиться

3 ответа

Вам лучше проверить, откуда вы берете этот список.

Пустой список - это все, что вам нужно, потому что пустой список не даст сбоя.

Если вы получаете этот список откуда-то еще и не знаете, нормально это или нет, вы можете создать утилитный метод и использовать его так:

for( Object o : safe( list ) ) {
   // do whatever 
 }

И, конечно, safe будет:

public static List safe( List other ) {
    return other == null ? Collections.EMPTY_LIST : other;
}
219
ответ дан 23 November 2019 в 21:12
поделиться
var hr = (new Date()).getHours(); //get hours of the day in 24Hr format (0-23)

В зависимости от вашего определения дня/ночи, выполните магию:)

PS: Если ваш день/ночь начинается не в точный час, вы можете попробовать getMinutes () .

-121--2913721-

При создании приложения Rails 3 просто пройдите по параму -J :

$ rails app_name -J

При этом будут пропущены библиотеки Prototype. Теперь необходимо удалить последний файл jquery.js в каталог public/javascripts . После этого также потребуется версия jQuery файла rails.js . Вы можете получить это здесь:

http://github.com/rails/jquery-ujs/blob/master/src/rails.js

EDIT: Необходимо включить эти файлы в верхнюю часть макетов, чтобы получить функциональность. Вы можете сделать это,

<%= javascript_include_tag "jquery", "rails" %>

Надеюсь, это поможет!

-121--5044427-

Вы потенциально могли бы написать вспомогательный метод, который вернул бы пустую последовательность, если бы вы передали значение null:

public static <T> Iterable<T> emptyIfNull(Iterable<T> iterable) {
    return iterable == null ? Collections.<T>emptyList() : iterable;
}

Тогда используйте:

for (Object object : emptyIfNull(someList)) {
}

Я не думаю, что на самом деле я бы сделал это, хотя - я бы обычно использовал вашу вторую форму. В частности, важно «или бросить ex» - если оно действительно не должно быть нулевым, обязательно следует бросить исключение. Вы знаете, что что-то пошло не так, но вы не знаете степень ущерба. Прервать рано.

99
ответ дан 23 November 2019 в 21:12
поделиться

Это очевидное упущение из свойств, что вы не можете написать что-то вроде:

public T2 Item2 { get; readonly set; } 

Я даже не уверен, что readonly является лучшим словом для обозначения "может быть установлен только в конструкторе" , но это то, с чем мы застряли.

Это на самом деле функция, которую многие люди запросили, поэтому будем надеяться, что она будет представлена в гипотетической новой версии C # в ближайшее время.

См. этот связанный вопрос .

-121--1308724-
(new Date).getHours()

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

Сначала я думаю, что вы хотите выполнить эту операцию как можно скорее на клиенте, чтобы избежать любого потенциального переформатирования браузера .

-121--2913723-

При получении List из реализуемого вызова метода не возвращайте null , возвращайте пустой List .

Если не удается изменить реализацию, выполняется проверка null . Если значение не должно быть null , вызовите исключение.

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

7
ответ дан 23 November 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: