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 ())?
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(); }
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