assert vs null в Java

Часто, когда я шифрую код Андроид Студио, он предупреждает мне, что такая функция может возвращать @nullable, Ваших рекомендаций два: Включать все в if, который подтверждал бы, если объект, переменная, функция null или использовать решение assert (что не быть для того, чтобы он служит)

Пример

final LinearLayout img = (LinearLayout) SplashActivity.this.findViewById(R.id.splashscreen);

//con checkeo si es nulo
if (img != null )
    img.setVisibility(View.GONE);

//con assert
assert img != null;
img.setVisibility(View.GONE);

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

1
задан 22.03.2016, 19:05
3 ответа

Размещенное слово assertон используется в Java для того, чтобы реализовывать утверждения кода во время выполнения. Ты должен быть осторожен, использовав assert так как, если оценка не удастся, бросится один Error (более серьезно, чем одна Exception), специально один AssertionError и когда программа последовала за этим, если ошибка контролируется приложение (или я пряду), она будет остановлена. По умолчанию, asserts они проигнорированы JVM, ты можешь включать их, добавив параметр -enableassertions или -ea. Как личная рекомендация, только используй assert в течение времени debug или выполнения в средах разработки, не давай возможность оценке asserts в производстве. Важно: не запутывать размещенное слово assert с методами assertXyz frameworks таких доказательств как JUnit или TestNG, вышеупомянутая группа они выполняют отличную функциональность.

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

На коде примера, который ты размещаешь в вопросе и основано на предварительных объяснениях, я рекомендовал бы, чтобы ты использовал первую форму, форму проверки null так как твой код будет защищен перед любой ошибкой:

if (img != null )
    img.setVisibility(View.GONE);
3
ответ дан 24.11.2019, 14:42
  • 1
    Спасибо, из-за explicaci и # 243; n очень подробная – Webserveis 22.03.2016, 19:18

Если переменная может быть недействительной во время выполнения:

Ты должен санкционировать, что она не являлась недействительной перед тем, как пробовать соглашаться на члена этой, или иначе он бросит исключение.

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

Если предполагается, что переменная не смогла являться недействительной.

Тогда факт, который процедил стоимость null, представляет вирус. assert, то, что он делает, состоит в том, чтобы проверять это и бросать один AssertionError в случае не будьте выполнен. Встретившись с этой ошибкой немедленно ты должен понимать, что говорится об ошибке программирования, и стараться упорядочивать код для того, чтобы это вновь не происходило.

2
ответ дан 24.11.2019, 14:42

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

В случае Android не является очень использованным assert, в самом деле ты можешь видеть это в классах SDK, разум простой в случае виртуальной машины Dalvik (Который еще очень использован) конфигурировался, чтобы игнорировать из-за default assert. Кроме того помни, что в участниках соревнования Assets они выведены из строя из-за default.

На основании твоего вопроса:

Включать все в if, который подтверждал бы, если объект, переменная, функция - null, или использовать решение assert.

Я предлагаю тебе в специфическом случае Android реализовать проверку: он недействительный?

if (obj==null) {
 throw new CustomError("Object cannot be null");
}

в твоем примере я предлагаю использовать:

if (img != null )
    img.setVisibility(View.GONE);
1
ответ дан 24.11.2019, 14:42