Czy istnieje sposób na zautomatyzowanie pisania wzorców Builder w IntelliJ?
Na przykład, biorąc pod uwagę tę prostą klasę:
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;
}
}
czy jest sposób, w jaki mógłbym uzyskać IDE, aby wygenerować to lub podobne:
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;
}
}
Zauważyłem, że wbudowane generowanie wzorca konstruktora w IntelliJ jest nieco niezgrabne z kilku powodów:
command+N
w systemie OS X).InnerBuilder plugin adresy wszystkich tych wad, i nie wymaga instalacji ani konfiguracji. Oto przykładowy Konstruktor wygenerowany przez wtyczkę:
źródło
alt+shift+B
,enter
i BAM, masz Builder. : DOto, jak przezwyciężyć niedociągnięcia, o których wspomniał Mansoor Siddiqui :
Który jest bardzo łatwy do wygenerowania. Po prostu naciśnij Alt+ Insw systemie Windows, aby wywołać menu Generuj i wybierz
Constructor
.Po prostu przejdź do
Settings -> Keymap
, wyszukajBuilder
i przypisz mu wybrany skrót (jeśli korzystasz z tej funkcji bardzo często, co rzadko się zdarza). Możesz na przykład przypisać Alt+ B.Inną alternatywą jest Ctrl+ Shift+ A(Find Action). Zacznij pisać,
Builder
a natychmiast uzyskasz dostęp do polecenia:Możesz użyć tego skrótu, aby szybko uzyskać dostęp do dowolnej funkcji IntelliJ IDEA (jest to bardzo pomocne, gdy nie pamiętasz dokładnie, jak nazywa się polecenie i gdzie je znaleźć).
Wolę też moich konstruktorów jako statyczne klasy wewnętrzne. Niestety nie ma prostego sposobu, aby to zrobić, ale nadal jest to wykonalne. Musisz tylko samodzielnie zdefiniować zagnieżdżoną klasę wewnętrzną (pozostaw ją pustą), a po wywołaniu
Replace Constructor with Builder
okna dialogowego wybierzUse existing
opcję i wybierz swoją klasę wewnętrzną. Działa jak marzenie! Chociaż byłoby łatwiej skonfigurować tę opcję.źródło
Jeśli zastanawiasz się, czy można to wykorzystać do stworzenia klasy z wewnętrzną klasą budującą, jak opisano przez Joshua Blocka - musisz najpierw zdefiniować pustą klasę wewnętrzną, a następnie zaznaczyć "Użyj istniejącej" i wyszukać nowo utworzoną (wewnętrzną klasę ) i kliknij „Refaktoryzuj”.
PS! Kursor musi znajdować się w konstruktorze (wstępnie napisanym), aby można było użyć funkcji refaktoryzacji „Zamień konstruktor na Builder”.
źródło
IntelliJną drogą do tego jest IMHO, jest skomplikowana. Istnieją dwie wtyczki (wolę tę: https://plugins.jetbrains.com/plugin/7354 ), które znacznie lepiej służą temu celowi.
Na przykład wolę mieć klasę Builder jako wewnętrzną klasę PoJo. Aby to osiągnąć z IntelliJ, potrzebujesz kilku dodatkowych ruchów.
Kolejnym plusem wtyczki jest lokalizacja funkcjonalności (w
Generate...
menu kontekstowym).źródło
Lombok to najłatwiejszy sposób! (Posiada wtyczkę Intellij do obsługi składni https://plugins.jetbrains.com/plugin/6317-lombok-plugin )
Wystarczy dodać
@Builder
adnotację, a za ścianami doda implementację budowniczego wewnątrz obiektu.Z Lombok:
Bez Lombok:
Źródło: https://projectlombok.org/features/Builder
źródło
Moim zdaniem najprostszym sposobem na uzyskanie wewnętrznej klasy statycznej zamiast osobnej są:
źródło
Jako uzupełnienie odpowiedzi @ CrazyCodera, myślę, że bardzo przydatne jest wiedzieć, że w prawym górnym rogu okna dialogowego Zamień konstruktora na Konstruktor znajduje się przycisk konfiguracyjny, którego można użyć do zmiany nazwy prefiksu ustawiającego.
źródło
Dla tych, którzy chcą zamienić „zbyt wiele parametrów” na wzorzec konstruktora, wykonaj „wyodrębnij obiekt parametru”, a następnie konwertuj konstruktor do konstruktora wspomnianego w innych odpowiedziach tutaj.
źródło
Wygeneruj konstruktora klasy, klikając prawym przyciskiem myszy pozycję Generuj> Konstruktor. Następnie w systemie Windows naciśnij kombinację klawiszy Ctrl + Shift + A, aby znaleźć akcję i wpisz „budowniczy”, wybierz „Zastąp konstruktora przez konstruktora”.
źródło
Uważam, że Effective Inner Builder jest najlepszą opcją, ponieważ dodaje kontrole null i może zaczynać się od zdefiniowanych elementów członkowskich.
źródło