2011-12-13 8 views
12

Nel mio progetto ho un pacchetto shapes che ha forme che ho progettato per il mio programma di grafica, ad esempio Rectangle, Circle. Ho anche uno o due pacchetti con lo stesso nome delle classi java.awt.Troppe importazioni spamming il mio codice

Ora, dato che non desidera rinominare ogni classe nel mio codice-base, per mostrare i miei file di origine che di classe che intendo quando, per esempio, dichiara un nuovo rettangolo, ho bisogno di uno:

1- importazione della classe rettangolo in modo esplicito, vale a dire l'importazione shapes.Rectangle

O

2- importazione solo le classi java.awt cui ho bisogno e non import java.awt. *, che include automaticamente il awt.Rectangle

Ora il problema è che in entrambi i modi provocare un sacco di importazione, Al momento ho una media di 15-25 importazioni in ogni file sorgente, che sta seriamente facendo il mio codice misto-up e confusione.

Troppe importazioni nel codice sono una cosa negativa? C'è un modo per aggirare questo?

risposta

9

Sì, troppe importazioni sono una cosa negativa perché ingombrano il codice e rendono meno leggibili le importazioni.

Evita lunghe liste di importazione utilizzando i caratteri jolly.

Kevlin Henney parla di questo esatto domanda Stack Overflow 27:54 nella sua presentazione Clean Coders Hate What Happens to Your Code When You Use These Enterprise Programming Tricks da NDC Londra 16-20 gennaio 2017

+1

Secondo https://stackoverflow.com/questions/147454/why-is-using-a-wild-card-with-a-java-import-statement-bad?noredirect=1&lq=1 questo non va bene perché ingombra e potenzialmente confonde i tuoi spazi dei nomi. –

+1

È anche un incubo affrontare i conflitti di merge solo nella sezione di importazione, a causa di un collasso in * dopo aver colpito qualche soglia o espansione quando si utilizzano meno importazioni. – Hurda

2

È normale che nel mondo Java esistano molte importazioni: è davvero necessario importare tutto. Ma se usi IDE come Eclipse, fa le importazioni per te.

3

Un'altra alternativa consiste nel digitare il nome classe completo in base alle proprie esigenze. Nel mio esempio, ci sono 2 oggetti Element, uno creato da me org.opensearch.Element e l'altro org.w3c.dom.Element.

Per risolvere il conflitto nome, così da ridurre al minimo importazione "ingombra", ho fatto questo (nella mia classe org.opensearch.Element)

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

Come si può vedere, l'tipo di ritorno Element è fully- digitato (cioè ho specificato il nome di classe completo di Element).

Problema risolto! :-)

5
  • E 'una buona pratica di importare classe per classe invece di importare pacchetti interi

  • Qualsiasi buon IDE, come ad esempio Eclipse, crollerà le importazioni in una linea, e si può espandili quando necessario, in modo che non ingombrino la tua vista

  • In caso di conflitti, puoi sempre fare riferimento a classi pienamente qualificate, ma se una delle due classi è sotto il tuo controllo, puoi considerare di rinominarla. (con Eclipse, fare clic con il tasto destro sulla classe, scegliere Refactor -> Rename, si prenderà cura di aggiornare tutti i suoi riferimenti).

  • Se la classe sta importando da AWT e dal pacchetto di forme, è ok. Va bene importare da più classi; tuttavia, se ti accorgi di importare da molte fonti disparate, potrebbe essere un segnale che la tua classe sta facendo troppo e deve essere divisa.
+0

Questa risposta non contiene alcun argomento per spiegare perché è meglio usare le importazioni espliciti oltre i caratteri jolly , ma afferma solo che "gli IDE lo rendono meno doloroso", cioè il trattamento del sintomo, piuttosto che la causa. Questo è il motivo per cui ho deciso di minimizzare questa risposta. – Qqwy