Есть ли способ автоматизировать написание шаблонов Builder в IntelliJ?
Например, учитывая этот простой класс:
class Film {
private String title;
private int length;
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return this.title;
}
public void setLength(int length) {
this.length = length;
}
public int getLength() {
return this.length;
}
}
есть ли способ заставить IDE сгенерировать это или подобное:
public class FilmBuilder {
Film film;
public FilmBuilder() {
film = new Film();
}
public FilmBuilder withTitle(String title) {
film.setTitle(title);
return this;
}
public FilmBuilder withLength(int length) {
film.setLength(length);
return this;
}
public Film build() {
return film;
}
}
Я обнаружил, что генерация встроенного шаблона компоновщика в IntelliJ немного неуклюжа по нескольким причинам:
command+N
в OS X).InnerBuilder плагин адреса всех этих недостатков, и не требует установки или настройки. Вот пример Builder, созданный плагином:
источник
alt+shift+B
,enter
и БАМ, у вас есть свой строитель. : DВот как преодолеть недостатки, упомянутые Мансуром Сиддики :
Что очень легко сгенерировать. Просто нажмите Alt+ Insв Windows, чтобы вызвать меню «Создать», и выберите
Constructor
.Просто перейдите по адресу
Settings -> Keymap
, найдитеBuilder
и назначьте ему ярлык по вашему выбору (если вы используете эту функцию очень часто, что бывает редко). Например, можно присвоить Alt+ B.Другой альтернативой является Ctrl+ Shift+ A(Найти действие). Начните печатать,
Builder
и вы сразу получите доступ к команде:Вы можете использовать этот ярлык для быстрого доступа к любой функции IntelliJ IDEA (это очень помогает, когда вы точно не помните, что вызывается команда и где ее найти).
Я также предпочитаю свои конструкторы как статические внутренние классы. К сожалению, простого способа сделать это нет, но это все же возможно. Вам просто нужно самостоятельно определить вложенный внутренний класс (оставьте его пустым), а когда вы вызываете
Replace Constructor with Builder
диалог, выберитеUse existing
вариант и выберите свой внутренний класс. Работает как шарм! Хотя было бы проще сделать эту опцию настраиваемой.источник
Если вам интересно, можно ли это использовать для создания класса с внутренним классом построителя, как описано Джошуа Блоком - вам просто нужно сначала определить пустой внутренний класс, затем установить флажок «Использовать существующий» и выполнить поиск вашего вновь созданного (внутреннего класса ) и нажмите "Рефакторинг".
PS! Курсор должен находиться внутри конструктора (предварительно написанного) для использования функции рефакторинга «Заменить конструктор на построитель».
источник
Способ IntelliJ к этому, ИМХО, запутан. Есть два плагина (я предпочитаю этот: https://plugins.jetbrains.com/plugin/7354 ), которые намного лучше служат этой цели.
Например, я предпочитаю иметь класс Builder как внутренний класс PoJo. Чтобы добиться этого с помощью IntelliJ, вам понадобится несколько дополнительных штрихов.
Еще один плюс плагина - расположение функционала (в
Generate...
контекстном меню).источник
Ломбок - самый простой способ это сделать! (Он имеет плагин Intellij для поддержки синтаксиса https://plugins.jetbrains.com/plugin/6317-lombok-plugin )
Просто добавьте
@Builder
аннотацию, и за стенами он добавит реализацию конструктора внутри объекта.С Ломбоком:
Без Ломбока:
Источник: https://projectlombok.org/features/Builder
источник
На мой взгляд, самый простой способ получить внутренний статический класс вместо отдельного:
источник
В дополнение к ответу @ CrazyCoder, я думаю, очень полезно знать, что в верхней правой части диалогового окна Replace Constructor with Builder есть кнопка конфигурации, которую вы можете использовать для переименования префикса сеттеров.
источник
Для тех, кто хочет заменить «слишком много параметров» шаблоном построителя, выполните «извлечь объект параметра», а затем преобразовать конструктор в построитель, упомянутый в других ответах здесь.
источник
Сгенерируйте конструктор класса, щелкнув правой кнопкой мыши на class Generate> Constructor. Затем в Windows нажмите Ctrl + Shift + A, чтобы найти действие, и введите «строитель», выберите «Заменить конструктор на построитель ..»
источник
Я считаю, что эффективный внутренний построитель является лучшим вариантом, поскольку он добавляет нулевые проверки и может начинать только с определенных членов.
источник