microJUG – Telegram
microJUG
981 subscribers
155 photos
1 video
2 files
237 links
Мысли о Java.
Основной канал: @miniJUG
Буст: https://news.1rj.ru/str/microJUG?boost
Чат: https://news.1rj.ru/str/micro_JUG
Таблица JEP'ов: https://minijug.org/jeps.html
Download Telegram
Новые синтаксические возможности с Java 10 по Java 15 в одной картинке
Чёрт, в новом Телеграме статистика канала доступна только для 1000+ подписчиков. А в miniJUG пока только 717. Ну что ж, значит будем расти.
Когда говорили, что не нужно использовать лишние зависимости без необходимости, но они не послушались.
Узнали? Согласны?
Плагин для IntelliJ IDEA, который заменяет стандартные иконки для специфичных типов файлов (gradle, git, Travis и т.д.)
Итак, в Java 15 ZGC и Shenandoah оба станут production ready. Ваш выбор?
Anonymous Poll
39%
ZGC🤘
61%
Shenandoah 💪
Ещё один интересный плагин для Идеи: Laconic POM. Делает так, чтобы POM-файлы Maven выглядели более компактно.
#maven
Шёл 287-й день карантина...
Forwarded from JUGNsk News
Друзья, всем привет!

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

Итак, добро пожаловать на первый онлайн митап JUGNsk!
Он пройдет в пятницу 24.04.2020, в 19-00 по Новосибирскому времени, в Zoom и на Youtube.

Мы решили сразу зайти с козырей, поэтому пригласили стать нашим первым online докладчиком знаменитого Алексея Шипилева! Алексей выступит с докладом: "Shenandoah GC 2.0".

Регистрация на мероприятие и детали: https://www.meetup.com/ru-RU/JUGNsk/events/270056867/

Важно: ограничение на количество участников исключительно для Zoom, одновременно будет доступна трансляция на наш Youtube канал, поэтому можете заранее подписаться, если еще нет: https://www.youtube.com/c/JUGNsk
Никогда не используйте Cloneable!

Тут Тагир Валеев написал в Твиттере, что clone() это неплохая штука, если ей правильно пользоваться. Я с этим категорически не согласен. clone() — ужаснейшая вещь. Попробую объяснить почему.

Давайте вспомним, что это вообще такое. Cloneable — наследие с самой первой версии Java. Это интерфейс, который позволяет легко добавлять возможность копирования объектов наших классов. Для этого мы просто наследуем класс от интерфейса Cloneable, и JVM с помощью некоторой магии генерирует нам реализацию метода clone(), которая будет делать копии путём простого копирования полей. При этом сам метод clone является protected методом в классе java.lang.Object, и поэтому доступен для каждого класса, в том числе для тех, кому клонирование нафиг не нужно (это 99% классов).

Здесь можно провести полную аналогию с сериализацией. Если в сериализации есть интерфейс Serializable, который не содержит методов и является интерфейсом-маркером, и при его реализации класс автоматически становится сериализуемым, то в этом случае есть интерфейс Cloneable, который тоже не содержит методов и также является интерфейсом-маркером, и при его реализации класс автоматически становится клонируемым.

Какие проблемы есть у такого механизма клонирования?

Во-первых, это отсутствие статических проверок. Можно забыть отнаследоваться от интерфейса Cloneable и спокойно при этом пользоваться методом clone(). Об ошибке мы узнаем только во время выполнения, когда вылетит CloneNotSupportedException.

Во-вторых, это необходимость downcasting’а при вызове метода clone(). Из-за того, что метод clone() в классе java.lang.Object возвращает Object, нам приходится делать явный cast, чтобы привести его к конкретному типу. Например, если вы вызовете ArrayList.clone(), то вам вернётся Object, а не ArrayList, и вам придётся скастовать к ArrayList. Во времена Java 1.0 это не казалось проблемой, поскольку тогда downcasting был совершенно привычной практикой, но сегодня большинство программистов старается избегать написания подобного нетипобезопасного кода.

В-третьих, так как в большинстве случаев, чтобы нести какую-то пользу, метод clone() должен быть публичным, то нам приходится переопределять метод clone() с одной лишь целью — изменить protected на public! При этом при переопределении метода clone() приходится писать абсолютно бесполезный код, в котором не делается ничего полезного кроме вызова super-метода и перебрасывания CloneNotSupportedException.

И это четвёртая проблема: CloneNotSupportedException является checked-исключением. Checked-исключения — это одна из вещей, от которой я бы тоже с удовольствием избавился в Java. От них вреда намного больше, чем пользы. Можно это как-нибудь позже более подробно обсудить. И если, в том, что, например, IOException является checked-исключением, есть хоть какой-то смысл, то в том, что CloneNotSupportedException сделали checked, смысла нет никакого. Заставлять каждый раз ловить CloneNotSupportedException при вызове clone() — чем думали создатели??

Какое есть решение у вышеперечисленных проблем? Решение простое — просто никогда не использовать Cloneable и метод clone(). Ну разве что за исключением клонирования массивов (это единственное исключение). В остальных случаях, если хочется иметь копирование, можно просто написать свой конструктор копирования или метод копирования, например назвав его copy(). Это будет намного лучше, прозрачнее и безопаснее, чем метод clone(), который создавал бы копию объекта на основе магии и в обход конструктора.
Ребята, провожу небольшое исследование. Нужно ответить на один вопрос. Как вы работали до и как стали работать после вспышки коронавируса?
Final Results
80%
Работал в офисе, теперь удалённо
10%
Работал удалённо и продолжаю работать удалённо
4%
Работал в офисе и продолжаю работать в офисе
2%
Я стал безработным
5%
Другое
Стабильность, которой позавидует даже Путин
#юмор
Forwarded from Ivan Ugliansky
Всем привет!

Мы закончили обработку видео и теперь публикуем их на нашем youtube-канале: https://www.youtube.com/playlist?list=PLecWId-JT7S6NvsX-8-_FSiwM2XsLoqH3

Простите за задержку с публикацией! Но надеемся, что теперь 13 видео отличных докладов скрасят вам остаток карантина и напомнят о нашем увлекательном последнем дне зимы :) Приятного просмотра!
(В 15-00 по Москве) 👇
Forwarded from JUGNsk News
Друзья, уже совсем скоро, в 19-00 начнется наш первый онлайн митап с Алексеем Шипилёвым!

Вы уже можете заходить в Zoom конференцию, указанную на странице мероприятия на meetup.com (если зарегистрировались), либо начинать смотреть трансляцию на нашем youtube канале: https://www.youtube.com/watch?v=c1jVn5Sm8Uw



Заранее напишу несколько слов про то, как все будет организовано:

1. Алексей выступит с большим докладом из двух частей. Между ними и в самом конце будет время для вопросов и ответов. Вопрос можно задать: 1) в Zoom лично, 2) в нашем чате в телеграме, 3) в чате трансляции на youtube.

2. По умолчанию у участников будут отключены микрофоны, чтобы избежать случайного шума. Если вы хотите задать вопрос, пожалуйста, воспользуйтесь функцией "Поднять руку". Для этого в Zoom на вкладке "Manage Participants"/"Участники" выберите действие "Raise a hand"/"Поднять руку". После этого мы размьютим ваш микрофон.

3. Пожалуйста, включайте камеры! Хоть у нас и онлайн митап, но мы хотим по максимуму воспроизвести атмосферу нашего обычного офлайн митапа. И самое главное: так вы сделаете выступление более комфортным для спикера (кому понравится 2 часа говорить в пустоту?)

4. После основной части будет афтепати :) Все желающие смогут остаться и продолжить общение в свободной форме.

На этом все, ждем вас в 19-00!
Раскрыта правда об отце рэпера Моргенштерна!
#юмор
Марк Рейнолд объявил о новом проекте OpenJDK под кодовым названием Leyden. Цель проекта - уметь создавать из Java-программ самодостаточный статический образ с помощью AOT-компиляции. Похожая технология уже есть в GraalVM под названием Native Image, но она не будет использоваться при разработке.