Java: как проверить, является ли объект null?



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



при попытке выполнить следующие строки:



Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (drawable.equals(null)) {
drawable = getRandomDrawable();
}


линия if (drawable.equals (null)) создает исключение, если drawable имеет значение null.



кто-нибудь знает, как должно быть проверено значение drawable, чтобы не вызывать исключение в случае, если оно равно null и получить локальное изображение (выполнить drawable = getRandomDrawable ())?

470   8  

8 ответов:

Отредактированное Решение Java 8:

final Drawable drawable = 
    Optional.ofNullable(Common.getDrawableFromUrl(this, product.getMapPath()))
        .orElseGet(() -> getRandomDrawable());

можно объявить drawablefinal в этом случае.

как отметил Chasmo, Android на данный момент не поддерживает Java 8. Поэтому такое решение возможно только в других контекстах.

if (drawable == null) {
  ...
}

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

The == проверка оператора ссылка равенство, что означает, что он смотрит, являются ли эти два объекта на самом деле тот же самый объект. Для этого не требуется объекты на самом деле существуют; два несуществующих объекта (null ссылки) также равны.

я использую такой подход:

if (null == drawable) {
  //do stuff
} else {
  //other things
}

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

Что касается того, почему вы не можете позвонить .equals() на объекте, который может быть null, Если ссылка на объект, у вас есть (а именно 'мешочки') и в самом деле null, оно не указывает на объект в куче. Это означает, что в куче нет объекта, на котором вызов equals() может преуспевать.

удачи!

СДЕЛАЙ САМ

private boolean isNull(Object obj) {
    return obj == null;
}

Drawable drawable = Common.getDrawableFromUrl(this, product.getMapPath());
if (isNull(drawable)) {
    drawable = getRandomDrawable();
}

if (yourObject instanceof yourClassName) будет оценено как false если yourObject и null.

drawable.equals(null)

В приведенной выше строке вызывается " equals(...)" метод объекта мешочки.

Итак, когда drawable не является нулевым, и это реальный объект, то все идет хорошо, так как вызов метода " equals (null) "вернет"false"

но когда " drawable "равно null, то это означает вызов" equals(...) "метод на нулевом объекте, означает вызов метода на объект, который не существует, поэтому он бросает "NullPointerException"

чтобы проверить, существует ли объект, и это не null, используйте следующее

if(drawable == null) {
    ...
    ...
}

В приведенном выше условии мы проверяем, что ссылочная переменная "drawable" имеет значение null или содержит некоторое значение (ссылка на ее объект), поэтому она не будет выдавать исключение в случае, если drawable имеет значение null как проверка

null == null

действителен.

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

использовать Google guava libs для обработки is-null-check (обновление deamon)

Drawable drawable = Optional.of(Common.getDrawableFromUrl(this, product.getMapPath())).or(getRandomDrawable());

Comments

    Ничего не найдено.