2013-12-13 15 views
5

Perché import one.two.* non include import one.two.three.MyClass? Non dovrebbe Java avere qualcosa come import one.two.**? O c'è qualche ragione (diversa da quella che non hanno fatto, non che non potevano farlo)?perché Java non ha un'importazione wildcard "profonda"?

Grazie

+0

Non uso nemmeno un singolo strato di pacchetto. * Se sono onesto, questo è il modo in cui il mio IDE li inserisce, ma rende dove le classi provenivano da più chiare –

risposta

8

Java non tratta i pacchetti come veramente sottoclasse l'un l'altro; mentre java.util e java.util.concurrency potrebbero sembrare che il secondo è in qualche modo parte del primo, sono considerati completamente indipendenti e il punto è principalmente lì per la pulizia.

Ciò significa che non devi aver paura di nominare la tua classe o l'interfaccia come un'altra dichiarata in qualche super-pacchetto o sotto-pacchetto in un secondo momento, e significa anche che dovresti scrivere solo una coppia linee extra di importazioni.

Le ragioni di questa decisione, come ha spiegato Peter Lawrey, derivano dalla generale inclinazione di Java verso la semplicità. La migliore pratica è spesso quella di non utilizzare mai i caratteri jolly di importazione.

4

Java considera ogni pacchetto come indipendente. Ad esempio, il pacchetto locale non si estende a nessun pacchetto "sub". Sospetto che usare la gerarchia in modo significativo sarebbe prezioso, ma il progetto di Java era di rendere tutto il più semplice possibile.

Oppure c'è qualche motivo (diverso da quello che non hanno fatto, non che non potevano farlo)?

Il problema è la compatibilità con le versioni precedenti che potrebbe interrompere i programmi meno recenti. Sospetto che sia risolvibile.

In verità, la maggior parte degli IDE gestisce le importazioni per te e non guardo più nemmeno le mie importazioni. È preferibile evitare import * in modo che tutte le classi vengano importate in modo esplicito.

Problemi correlati