2011-12-13 11 views
12

W moim projekcie mam pakiet shapes, który ma kształty zaprojektowane dla mojego programu graficznego np. Rectangle, Circle. Mam również jeden lub dwa pakiety o tych samych nazwach co klasy java.awt.Za dużo importów spamujących mój kod

Teraz, ponieważ nie chcę, aby zmienić nazwę każdej klasy w moim kodu bazy, aby pokazać moje pliki której klasy Znaczy źródłowych kiedy, powiedzmy, zadeklarować nowy prostokąt, muszę albo:

1- importu klasa prostokąt wyraźnie, to znaczy importu shapes.Rectangle

lub

2- importu tylko klasy java.awt muszę i import nie java.awt. * automatycznie zawiera awt.Rectangle

Teraz problemem jest to, że oba sposoby doprowadzić dużo importowania, obecnie mam średnio 15-25 importu w każdym pliku źródłowym, który jest poważnie podejmowania mój kod miesza się i mylące.

Czy zbyt wiele importów w kodzie jest złą rzeczą? Czy jest jakiś sposób obejścia tego?

Odpowiedz

9

Tak, zbyt wiele importów jest złym rozwiązaniem, ponieważ powoduje zatkanie kodu i sprawia, że ​​import staje się mniej czytelny.

Unikać długich list importu za pomocą symboli wieloznacznych.

Kevlin Henney opowiada o taką przepełnienie stosu pytanie 27:54 do jego prezentacji Clean Coders Hate What Happens to Your Code When You Use These Enterprise Programming Tricks z NDC Londynie 16-20 stycznia 2017

+1

Zgodnie z https://stackoverflow.com/questions/147454/why-is-using-a-wild-card-with-a-java-import-statement-bad?noredirect=1&lq=1 jest to złe, ponieważ się zacina i potencjalnie myli twoje przestrzenie nazw. –

+1

To także koszmar, aby poradzić sobie z konflikty seryjne tylko w sekcji importu, z powodu zawalenia się na * po osiągnięciu pewnego progu lub ekspansji przy mniejszym imporcie. – Hurda

2

To normalne, że w świecie Java jest dużo importu - naprawdę musisz zaimportować wszystko. Ale jeśli używasz IDE, takiego jak Eclipse, robi to za ciebie.

3

Inną opcją jest wpisanie w pełni kwalifikowanej nazwy klasy zgodnie z potrzebą. W moim przykładzie znajduje się obiekt 2 Element, utworzony przeze mnie org.opensearch.Element i inny org.w3c.dom.Element.

Aby rozwiązać konflikt nazw, a także w celu zminimalizowania przywóz „zaśmiecanie” Robiłem to (w moim org.opensearch.Element klasie):

public org.w3c.dom.Element toElement(org.w3c.dom.Document doc) { /* .... */ } 

Jak widać, typ zwracany Element jest fully- wpisane (tj. określiłem w pełni kwalifikowaną nazwę klasy Element).

Problem rozwiązany! :-)

5
  • Jest to dobra praktyka, aby zaimportować klasę przez klasę zamiast importować całe pakiety

  • jakieś dobre IDE, takie jak Eclipse, załamie przywozu w jednej linii, i można rozwiń je, gdy zajdzie taka potrzeba, aby nie zaśmiecały Twojego widoku.

  • W przypadku konfliktów możesz zawsze odnosić się do w pełni kwalifikowanych klas, ale jeśli jedna z tych dwóch klas jest pod twoją kontrolą, możesz rozważyć zmianę jej nazwy. (w Eclipse, kliknij prawym przyciskiem myszy na klasie, wybierz Refactor -> Rename, zajmie się aktualizacją wszystkich jej odniesień).

  • Jeśli klasa importuje się z AWT i z pakietu kształtów, jest w porządku. Można importować z kilku klas; Jeśli jednak importujesz z naprawdę wielu różnych źródeł, może to być znak, że twoja klasa robi zbyt wiele i trzeba się rozdzielić.
+0

Ta odpowiedź nie zawiera żadnych argumentów, dlaczego lepiej jest korzystać z jawnych importu nad symboli wieloznacznych , ale stwierdza tylko, że "IDE zmniejszają ból", czyli traktują objaw, a nie przyczynę. Dlatego postanowiłem zająć tę odpowiedź. – Qqwy