Компилятор должен был видеть, что вы проверяете на null, но - это много условий в операторе if
, поэтому, возможно, он превысил некоторый порог для производительности компилятора.
Поскольку else
- это не что иное, как return
, вы должны перевернуть утверждение.Это избавляет от необходимости объявлять переменную отдельно.
Я также разделил условия, чтобы прокомментировать их.
if (user_ids == null)
return true;
if (! "".equals(source_region)) // I think you meant the opposite check
return true;
if (! user_ids.containsKey(source_region)) // Redundant, the next check will cover this
return true;
if (user_ids.get(source_region) == null)
return true;
if (user_ids.get(source_region) == "") // Object is not a string, so this will always fail
return true;
String source_regions_user_id = user_ids.get(source_region).toString();
Вы также должны использовать isEmpty()
или length()
дляпроверять наличие пустых строк вместо сравнения с ""
.
Итак, принимая во внимание эти комментарии, мы можем изменить код на:
if (user_ids == null || source_region.isEmpty())
return true;
Object obj = user_ids.get(source_region);
if (obj == null)
return true;
String source_regions_user_id = obj.toString();
if (source_regions_user_id.isEmpty())
return true;
// use value here
С этим кодом компилятор не должен 'не запутайтесь, так что без предупреждения, и вы только посмотрите на карту один раз.