Разработка программ. Мои заметки.

МЕТКА: NullPointerException

February 23, 2017 at 23:59

NullPointerException в Java. Закончился цикл. От Истоков до Итогов.

Цикл про NullPointerException в Java — закончился. Вот ссылки на все статьи. Я планирую, что тексты не будут оставаться статичными, а будут меняться в процессе развития языка и упоминаемых инструментов.

1. NullPointerException в Java. Истоки.
2. NullPointerException в Java. The Billion Dollar Mistake.
3. NullPointerException в Java. Элегантное противостояние.
4. NullPointerException в Java. Аннотации как щит. FindBugs.
5. NullPointerException в Java. Checker Framework и Lombok.
6. NullPointerException в Java. Optional - что он такое есть?
7. NullPointerException в Java. Как использовать class Optional.
8. NullPointerException в Java. Сlass Optional в Java 9.
9. NullPointerException в Java. Итоги.

Под кат можно не ходить. Там тот же текст.

February 23, 2017 at 22:17

NullPointerException в Java. Итоги.

9. Ещё немного про Optional и пару советов. Полагаю — умных.

OptionalInt.

Хотелось бы напомнить, что если методу нужно вернуть некий объект. относящийся к одному из трёх обёрточных классов (классы-контейнеры для примитивных типов данных) — Integer, Long и Double. то для таких случаев уже предусмотрены OptionalInt, OptionalLong и OptionalDouble классы. Возникает законный вопрос, почему бы не использовать Optional<Integer>, зачем нужен отдельный OptionalInt? Вопрос хороший. Видимо потому, что в случае взаимодействия с другими интерфейсами вида IntConsumer, IntStream потребовалось бы много лишних преобразований типов и boxing/unbоxing. Возможно мы и вернёмся к этому вопросу как-нибудь позже.

А что есть в других языках?

Есть и в других языках свои неплохие синтаксические конструкции. Облегчающие это дело. Дело борьбы с NullPointerException. Обзорно коснёмся. Для повышения общей эрудиции.

February 8, 2017 at 23:10

NullPointerException в Java. Сlass Optional в Java 9.

8. Что нового появится в классе Optional в Java 9.

У класса Optional появится три новых заметных метода:


    public void ifPresentOrElse( Consumer<? super T> action, Runnable emptyAction )
    public Optional<T> or( Supplier<? extends Optional<? extends T>> supplier );
    public Stream<T> stream();

Рассмотрим их детальнее.

February 4, 2017 at 22:15

NullPointerException в Java. Как использовать class Optional.

7. Как использовать class Optional.

После того, как этот класс появился в стандартной библиотеке Java, некоторое количество народа начало его использовать прямо в лоб, объявляя в своих классах поля типа Optional. Просто потому, что они могут содержать null. Разумеется, любая переменная, указывающая на непримитивный тип данных, может хранить null. Но стоит ли её сразу объявлять как Optional?

Я не знаю как много было этих людей, но статьи с примерами такого употребления класса действительно встречались. На одну из них я сослался в предыдущей заметке. Разработчики языка и инструментов довольно быстро написали - ребята, не нужно так незамысловато использовать этот класс. Мы его для другого планировали!

January 31, 2017 at 22:15

NullPointerException в Java. Optional - что он такое есть?

6. Тип Optional. Знакомимся.

В Java 8 появился новый класс — Optional. Это несложный класс, присутствующий в стандартной Java библиотеке, который призван слегка обезопасить код, защитив его от NullPoiunterException. То есть, как-то способствовать уменьшению таких ситуаций при его грамотном использовании.

January 19, 2017 at 22:45

NullPointerException в Java. Checker Framework и Lombok.

5. Немного о Checker Framework и Lombok.

Checker Framework оказался чуть менее известен, но выглядит как мощный и аккуратно разрабатываемый инструмент со всей необходимой документацией. Я бы даже сказал, что выглядит он несколько более основательным и задокументированным, чем ранее рассматриваемый FindBugs.

Найти подробную историю его создания у меня не получилось. Но, по некоторым признакам, истоки восходят к известнейшему Вашингтонскому университету (washington.edu, Сиэтл, штат Вашингтон). Видимо, там его родина. Последняя версия (на момент написания статьи) — 2.1.7 (от 19 января 2017).

January 19, 2017 at 21:57

NullPointerException в Java. Аннотации как щит. FindBugs.

4. Аннотации в борьбе за безопасность кода. Немного о FindBugs.

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

January 17, 2017 at 19:06

NullPointerException в Java. Элегантное противостояние.

3. Попытки элегантного противостояния.

С большего, язык Java не имел и не имеет никаких готовых встроенных синтаксических “информаторов”, позволяющих внятно указать, что некоторое поле или параметр гарантированно не может принять значение null и его не нужно проверять перед использованием. Или наоборот, что поле, во время выполнения, порой содержит null и его обязательно нужно проверить перед обращением. Разумеется, можно всё это указать в комментариях к полю/параметру, но это будет скорее послание программисту, поскольку компилятор автоматически не сможет этого понять и подсказать нам, если мы сами этого не заметили.

January 7, 2017 at 19:05

NullPointerException в Java. The Billion Dollar Mistake.

2. Tony Hoare: “Null References: The Billion Dollar Mistake”.

Специального типа данных, называемого словами указатель или ссылка (как в C++), в языке Java - нет. Но в java любая переменная, которая не относится к встроенному примитивному типу данных (а это: byte, short, int, long, float, double, char и boolean) содержит именно адрес памяти, по которому расположена нужная нам информация и, таким образом, по своей сути является ссылкой. Или указателем, как вам больше нравится.

January 7, 2017 at 19:04

NullPointerException в Java. Истоки.

1. Откуда ноги растут. Значение, указатель, ссылка.

Вначале немножко букваря для тех, у кого Java есть первый язык программирования и кто на многие вещи пока не обращал пристального человеческого внимания. Люди, пришедшие из “древних” языков, требующих ручного управления памятью (скажем, С/С++), эти детали, конечно же, отлично понимают. Ну… должны во всяком случае.