Плагин javac или добавляем Extension Methods в Java


Screenshot from 2017-03-22 21-32-47.png
В Java 8 появилась возможность писать плагины к компилятору javac. С их помощью можно получать управление на нужном этапе компиляции и производить дополнительные проверки или изменения. Каждый плагин имеет название и может принимать аргументы для настройки своей работы.

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


Настройка
Для реализации плагина нужно добавить в зависимости tools.jar, который находится в составе JDK.
  1. dependencies

Продолжить

Рейтинг:  4  (Против: 0 | За: 4)
Добавлено: 22.03.2017 от aNNiMON

Комментарии (3)

Java 9. java.awt.Taskbar


В Java 9 добавлен специальный класс для взаимодействия с панелью задач. Таким образом, можно более тесно интегрировать Java-приложение с операционной системой.

Однако не все системы имеют панель задач, поэтому сперва следует проверить её поддержку:
  1. if (!Taskbar.isTaskbarSupported()) {
  2.     System.out.println("Taskbar is not supported");
  3.     return;
  4. }

Список поддерживаемых методов в Taskbar тоже ограничен, поэтому перед использованием метода нужно проверить, что действие, которое он выполняет, поддерживается. Для этого есть метод boolean isSupported(Taskbar.Feature) и класс перечислений Taskbar.Feature. Код:
  1. final Taskbar taskbar = Taskbar.getTaskbar();
  2. Arrays.stream(Taskbar.Feature.values())

Продолжить

Рейтинг:  5  (Против: 0 | За: 5)
Добавлено: 23.10.2016 от aNNiMON

Комментарии (5)

Java 9. Project Jigsaw. Модульность


Ключевой особенностью предстоящего релиза Java 9 является поддержка модульности, которую принесёт Project Jigsaw. Цель этого проекта — сделать Java SE платформу более гибкой, производительной и защищённой за счёт разбиения JDK на модули и внедрения модульной системы.

Модуль
В отличие от обычного jar-файла, который означал для JVM лишь хранилище кода и ресурсов, jar-модуль содержит класс module-info, который предоставляет:
  - имя модуля;
  - информацию о модулях-зависимостях, которые нужны для корректной компиляции и работы;
  - информацию о пакетах, которые открывает (экспортирует) этот модуль;
  - список сервисов, которые поставляет модуль в рантайме.

В третьем пункте кроется одно важное изменение, которого доселе так не хватало.
Продолжить

Рейтинг:  5  (Против: 0 | За: 5)
Добавлено: 21.10.2016 от aNNiMON

Комментарии (9)

Java 9 Early Access. Установка


Менее полугода остаётся до релиза Java 9, так что, думаю, пора потихоньку изучать новшества и готовиться к изменениям.

Начнём с установки и подготовим рабочее пространство для работы с Java 9 EA.


Установка JDK9
Скачать сборку можно с официального сайта https://jdk9.java.net/download/, приняв сперва лицензию.

Обратите внимание: Java 9 следует устанавливать дополнительно, а не как замену существующей версии Java (а лучше и вовсе на виртуалку), иначе часть приложений может перестать работать.

Для Ubuntu-based систем есть возможность установки из PPA, но в этом случае мы получим Java 9 как основную версию в системе и сборка не всегда может
Продолжить

Рейтинг:  4  (Против: 0 | За: 4)
Добавлено: 19.10.2016 от aNNiMON

Комментарии (10)

Пишем движок для конфигов на LiketEngine


Это моя первая, поэтому не ругайте сильно.
Не люблю тянуть время, так что начнем.
Движок будем называть CommandShell.
Для начала определимся с командами, которые будем использовать на движке, эти:
1. echo
2. run
3. exec
4. stop
5. exit
Пока 5 команд хватит.
Создадим библиотеку команд, т.е. класс в котором будет хранится список команд.
Создаем класс например CommandShellLibrary и наследуем его от liket.engine.Library.
  1. package shell.engine;
  2.  
  3. import liket.engine.*;
  4. import liket.engine.work.*;
  5.  
  6. public class CommandShellLibrary extends Library
  7. {
  8.     public CommandShellLibrary(WorkListener workListener)
  9.     {
  10.         super(workListener);
  11.         int id = 0;
  12.         commands = new String[5];
  13.  
  14.         commands[id++] = "echo";
  15.         commands[id++] = "run";
  16.         commands[id++] =

Продолжить

Рейтинг:  5  (Против: 1 | За: 6)
Добавлено: 11.09.2016 от Aladdin

Комментарии (12)
Всего: 42
<< 1 2 3 4 5 6 ... 9 >>

Мы в соцсетях

tw tg yt gt