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

ТЕМА: java

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 15, 2017 at 23:58

Интерфейсы в Java 8 и Java 9. И немного об абстрактных классах.

Interface Недавно в интернете попался программистский анекдот. Совсем незамысловатый, но суть проблемы оттеняющий. Звучит вот так:
Собеседуют Java разработчика. Задают традиционный вопрос:
– В чём состоит отличие абстрактного класса от интерфейса?
– бла-бла… наличие реализации… бла-бла-бла….
– Хорошо, а в Java 8?

Вроде ничего особенного, но вопрос действительно слегка усложнился. Решил чуть детальнее осветить сей аспект.

Эволюция интерфейсов в Java. Нововведения в Java 9.

February 15, 2017 at 23:55

Эволюция интерфейсов в Java. Нововведения в Java 9.

Как менялись возможности интерфейсов в Java. Текущие итоги.

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

До Java 8, Java интерфейс — это конструкция, похожая на класс в котором отсутствуют реализации методов:


    public interface MyStrongInterface 
    {
        public int howManyTimes = 15;

        public void doIt();
    }

Начнём с требований к интерфейсу, которые были заложены в Java, в момент создания языка. С большего они верны и сейчас. Хотя позже появились и расширения. Мы их также рассмотрим.

February 9, 2017 at 20:18

Дата выхода Java 9 — 27 июля 2017 года.

Java 9 Решил уточнить, не изменились ли снова сроки выхода JDK 9. Нет, не изменились. Java 9 is coming! Countdown to Java 9 Release Date. До официального релиза осталось 167 дней. Напомню, что изначально дата выхода Java 9 планировалась на сентябрь прошлого (2016) года. Затем была отложена на март 2017 года. А затем, в сентябре, главный архитектор проекта Mark Reinhold предложил ещё раз отложить дату выхода на июль 2017. Новый план был официально утверждён во второй половине октября 2016 года. Выглядит он так:

  • 2016/05/26 Feature Complete
  • 2016/12/22 Feature Extension Complete
  • 2017/01/05 Rampdown Start
  • 2017/02/09 All Tests Run
  • 2017/02/16 Zero Bug Bounce
  • 2017/03/16 Rampdown Phase 2
  • 2017/07/06 Final Release Candidate
  • 2017/07/27 General Availability

По такому случаю хотелось бы ещё раз подытожить, что же нового определённо добавится в девятке. Список этот тайной не является, но есть мнение что в процессе работ он всё-таки корректировался. Формально, он приведён вот тут — JDK 9. Данные актуальны на 19 января 2017 года. Я посчитал количество позиций в списке. Их там 89 (ну если не ошибся, по любому — близко). 89 нововведений. Причём, там перечислены логически очерченные места. Это не просто формальный список новых методов или классов. Для простоты ориентации, была сделана попытка систематизировать все нововведения, разбив их на категории. О ней можно прочитать в блоге Oracle.

Было предложено использовать 6 категорий. Некоторые из них слегка туманно сформулированы (пересекаются с другими). И даже присутствует некоторая путаница в пояснениях. Автор не очень внимательно отнеслась к своей заметке. Два раза перечислила категорию New standards и забыла про категорию Gone. Но, тем не менее, попробуем придерживаться этой классификации. Итак.

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 6, 2017 at 02:12

Следующая заметка об Optional.

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

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

February 4, 2017 at 22:15

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

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

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

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

January 31, 2017 at 23:58

Мы на финишной прямой!

Вот мы и добрались до сердца повествования. Быстро пришли. Начинаю вещать про class Optional. Рассчитываю уложиться в две заметки. Коротенько так, но зато всё по делу.

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

January 31, 2017 at 22:15

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

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

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