Корректно избегающий NullPointerException в Java

Этот код

int a = 5;
printf("%x\n", a);

печатает

5

Этот код

int a = 5; 
printf("0x%x\n", a);

печатает

0x5

Этот код

int a = 89778116;
printf("%x\n", a);

печатает

559e7c4

Если вы вводите заглавную букву x в формате, то заглавным становится шестнадцатеричное значение:

int a = 89778116;
printf("%X\n", a);

печатается

559E7C4

Если вы хотите напечатать указатели, вы используете спецификатор формата p:

char* str = "foo";
printf("0x%p\n", str);

печатает

0x01275744
23
задан Jon Seigel 4 April 2010 в 09:05
поделиться

7 ответов

Я всегда использовал

if ("true".equals(object.getAttribute("someAttr"))) { // ....

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

27
ответ дан 29 November 2019 в 01:38
поделиться

Во втором варианте вы можете воспользоваться коротким замыканием && :

String attr = object.getAttribute("someAttr");
if (attr != null && attr.equals("true")) { // ....
18
ответ дан 29 November 2019 в 01:38
поделиться

Есть определенные ситуации, когда краткий подход кажется неправильным для начала, но эффективно становится идиоматическим. Это один из них; другой - что-то вроде:

String line;
while ((line = bufferedReader.readLine()) != null) {
  // Use line
}

Побочные эффекты в состоянии? Немыслимо! За исключением того, что это в основном лучше, чем альтернативы, когда вы узнаете конкретный шаблон.

Этот шаблон похож - он настолько распространен в Java, что я ожидаю, что любой достаточно опытный разработчик распознает его. Результат приятно лаконичный. (Забавно, но я иногда вижу код C #, который использует ту же идиому без необходимости - оператор равенства отлично работает со строками в C #.)

Итог: используйте первую версию и ознакомьтесь с ней.

2
ответ дан 29 November 2019 в 01:38
поделиться

Мне нравится вариант 1, и я бы сказал, что он достаточно читабелен.

Вариант 3, кстати, заключается во введении метода getAttribute, который принимает значение по умолчанию в качестве параметра.

1
ответ дан 29 November 2019 в 01:38
поделиться

Util.isEmpty (string) - возвращает string == null || string.trim (). isEmpty () Util.notNull (string) возвращает "", если строка == null , иначе строка. Util.isNotEmpty (строка) возвращает! Util.isEmpty (строка)

И у нас есть соглашение, согласно которому для строк Util.isEmpty (строка) семантически означает истину, а Util.isNotEmpty (строка) семантически означает ложь.

0
ответ дан 29 November 2019 в 01:38
поделиться

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

1
ответ дан 29 November 2019 в 01:38
поделиться

Это очень хороший вопрос. Обычно я использую не изящный:

if (object.getAttribute("someAttr") != null && object.getAttribute("someAttr").equals("true")) { // ....

(и больше не буду его использовать)

0
ответ дан 29 November 2019 в 01:38
поделиться
Другие вопросы по тегам:

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