JavaRush /Java блог /Архив info.javarush /Устал от Null Pointer Exceptions? Подумай над использован...
PodoBulge
31 уровень
Минск

Устал от Null Pointer Exceptions? Подумай над использованием Optional из Java SE 8!

Статья из группы Архив info.javarush
Перевод статьи: Tired of Null Pointer Exceptions? Consider Using Java SE 8's Optional! by Raoul-Gabriel Urma Делай свой код более читабельным и защищай его от null pointer exceptions. Мудрый человек сказал однажды, что ты не настоящий программист пока не повстречаешь null pointer exception. Шутки в сторону, пустая ссылка(null reference) это источник многих проблем, потому что она часто означает отсутствие значения. Java SE 8 представляет новый класс, java.util.Optional, который может облегчить некоторые их этих проблем. Давай начнем с примера, демонстрирующего опасность NULL. Рассмотрим структуру вложенного объекта Компьютера, проиллюстрированную на РИС.1. Устал от Null Pointer Exceptions? Подумай над использованием Optional из Java SE 8! - 1 Рисунок 1: Вложенная структура, представляющаа Компьютер Что возможно проблематичное в следующем коде? String version = computer.getSoundcard().getUSB().getVersion(); Этот код выглядит достаточно рационально. Однако, много компьютеров(например, Raspberry Pi) в дейстительности не поставляются с звуковой картой. И что будет в результате вызова метода getSoundcard()? Общая (плохая) практика - это возвращать "пустую ссылку"(null reference), чтобы показать отсутствие звуковой карты. К несчастью, это значит, что вызов метода getUSB() попытается вернуть пустую ссылку USB порта, что в результате приведет к NullPointerException во время исполнения и остановит твою программу от дальнейшего выполнения. Представь если твоя программа была работала на компьютере заказчика; что бы сказал твой заказчик, если бы программа внезапно вылетела? To give some historical context, Tony Hoare—one of the giants of computer science—wrote, "I call it my billion-dollar mistake. It was the invention of the null reference in 1965. I couldn't resist the temptation to put in a null reference, simply because it was so easy to implement." What can you do to prevent unintended null pointer exceptions? You can be defensive and add checks to prevent null dereferences, as shown in Listing 1: String version = "UNKNOWN"; if(computer != null){ Soundcard soundcard = computer.getSoundcard(); if(soundcard != null){ USB usb = soundcard.getUSB(); if(usb != null){ version = usb.getVersion(); } } }
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Badger Уровень 22 Expert
18 сентября 2020
Это только кусок статьи, хорошо хоть ссылка на оригинал есть.
Helen Shushunova Уровень 3
21 августа 2020
Опечатка "представляющаа"