Java 9 Модули (проект Jigsaw)
Данная статья написана командой Vertex Academy. Это одна из статей из нашего Учебника по Java 9. Надеемся, что данная статья Вам будет полезна. Приятного прочтения!
1. Введение
В Java 9 появился долгожданный Project Jigsaw, или же просто модули. Они позволяют сделать приложение меньше в обьеме, более инкапсулированным и совершенным. В этой статье мы рассмотрим создание модулей.
2. Создание первого модуля
Для того чтобы создать модуль в IntelliJ IDEA необходимо в заранее созданном приложении нажать правой кнопкой на модуль и выбрать "new -> module" далее указываем имя и создаем наш первый модуль. В нашем случае имя модуля - human
Важный момент, для того чтобы модуль был полноценным, ему нужно добавить module-info.java, при чем создан он должен быть строго в папке src. Содержимое файла, в нашем случае, будет выглядеть так
1 2 |
module human { } |
Дальше все как в обычном Java приложении, можем создавать пакеты, классы и тд.
Создадим пакет services, и в нем следующий класс
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class SoftwareDeveloper { private Knowledge knowledge; public SoftwareDeveloper(Knowledge knowledge) { this.knowledge = knowledge; } public String develop(String requirements) { System.out.println(requirements); System.out.println("Ну и требования..."); knowledge.obtain(requirements); return "Вот такой вот софт"; } } |
Поскольку создавать программное обеспечение без знаний нельзя, то их нужно как-то получить. Для этого создадим другой модуль, назовем его knowledge-base и создадим в нем вот такую структуру
В классе Knowledge создадим метод obtain(String requirements)
1 2 3 4 5 6 7 8 9 10 |
public class Knowledge { public String obtain(String requirements) { String knowledge = KnowledgeHelper.obtainDomainKnowledge(requirements); System.out.println("Теперь я всеееее знаю"); System.out.println(knowledge); return knowledge; } } |
Этому классу необходим класс KnowledgeHelper для получения знаний по предметной области. Класс находится в пакете internal и выглядит так
1 2 3 4 5 6 7 8 9 |
public class KnowledgeHelper { private static final Random random = new Random(); private static final String bankArea = "Банковская сфера, точно тебе говорю"; private static final String stockExchangeArea = "Да ну, это ведь биржа"; public static String obtainDomainKnowledge(String requirements) { return Math.random() > 0.5 ? bankArea : stockExchangeArea; } } |
Итак, вроде бы все создали, но. Нужно ведь создать module-info.java
1 2 3 |
module knowledge.base { exports knowledgebase; } |
Ключевое слово exports используется, чтобы указать какие пакеты из модуля могут использоваться в других модулях. В данном случае мы открываем пакет knowledgebase, но НЕ internal. Если мы хотим открыть доступ и к нему, то его нужно явно указать так
1 |
exports knowledgebase.internal; |
Но мы этого делать не будем, пакет на то и внутренний, чтобы он использовался только внутри модуля.
Здесь закончили, возвращаемся к модулю human. Для того, чтобы SoftwareDeveloper мог пользоваться знаниями необходимо изменить наш module-info.java
1 2 3 |
module human { requires knowledge.base; } |
Ключевое слово requires используется, чтобы указать какие модули нужны для работы данного модуля. В этом случае, модулю human для работы необходим модуль knowledge.base.
Помним, что экспортируем мы пакеты, а требуем - модули.
Теперь со спокойной душой можно добавить импорт в класс SoftwareDeveloper
1 2 3 |
import knowledgebase.Knowledge; public class SoftwareDeveloper ... |
Проверим как все работает, для этого создадим в модуле human пакет main и класс Owner
1 2 3 4 5 6 7 8 9 10 |
public class Owner { public static void main(String[] args) { Knowledge knowledge = new Knowledge(); SoftwareDeveloper developer = new SoftwareDeveloper(knowledge); String software = developer.develop("Хочу, чтобы было так и вот так"); System.out.println(software); } } |
При запуске увидим следующее
1 2 3 4 5 |
Хочу, чтобы было так и вот так Ну и требования... Теперь я всеееее знаю Банковская сфера, точно тебе говорю //эта строка может быть другой, рандом он такой :) Вот такой вот софт |
На этом статья заканчивается, но не новинки Java 9.
Есть возможность записаться на наши курсы по Java. Детальную информацию смотрите у нас на сайте.