/ / Confusione di importazione Java - java, import

Confusione di importazione Java - java, import

Qual è la differenza tra:

java.awt.*;

e:

java.awt.event.*;

Trovo entrambi in molti programmi.

risposte:

33 per risposta № 1

I pacchetti in Java non sono nidificati.

Quando tu import java.awt.*, stai solo importando tutte le classi e le interfacce presenti nel pacchetto java.awt - siete non importazione di tutti i pacchetti sottostanti java.awt, ad esempio java.awt.event.

Anche se sembra che i pacchetti siano nidificati (ad esempio, sembra come se java.awt.event è un "subpackage" di java.awt), questo non è proprio il caso. Dovresti considerare java.awt e java.awt.event come due diversi pacchetti non correlati che hanno una parte comune nei loro nomi.


5 per risposta № 2

I primi solo tipi di importazione dal pacchetto java.awt (ma non i relativi sottopacchetti) e le altre importazioni solo da java.awt.event (ma non da altri pacchetti).

Mentre i pacchetti in Java possono (e dovrebbero essere)organizzato in una gerarchia, la dichiarazione di importazione tende ad essere "conservativa": quando si importano tutti i tipi da quel pacchetto, si ottengono solo quelli specificatamente a quel livello, non al livello più basso nella gerarchia.

Penso che la logica alla base di questo sia evitareimportazioni spurie. Generalmente è una buona idea importare il meno possibile - solo le necessità essenziali, per evitare l'accoppiamento, le dipendenze e le ambiguità (ad esempio, cosa succede se una nuova classe viene aggiunta al pacchetto con un nome che è in conflitto con un nome in un altro pacchetto?). Ecco perché se usi Eclipse per organizzare le tue importazioni, in realtà aggiungerà istruzioni di importazione specifiche all'interno della versione asterisco, anche se questo significa linee aggiuntive. Importare tutto nei pacchetti secondari sarebbe anche peggio, otterrai davvero tutto.

Inoltre, una pratica comune è mettere specialeclassi di utilizzo e classi specifiche dell'implementazione, nei propri sottofacchetti. Spesso, in particolare, si vuole evitare di importarli a meno che non sia cruciale. Ancora una volta, l'importazione dell'intera sottostruttura sarebbe in conflitto con quella.


1 per risposta № 3

Come molti hanno già detto prima.

import java.awt. * won "t importa qualsiasi classe in java.awt.event ...

E la differenza tra questi due pacchetti è che java.awt. * Include classi come Frame, Button, ecc. E il pacchetto java.awt.event. * Include tutto l'event / listener che può accadere.

Esempio, per creare un pulsante hai bisogno della classejava.awt.Button ma se si desidera che qualsiasi azione si verifichi quando si fa clic sul pulsante, è necessario un java.awt.event.ActionListener che "attende" il clic, quindi genera un java.awt.event.ActionEvent.


0 per risposta № 4

java.awt.* è non un'espressione regolare, che è ciò che penso tu stia aspettando / pensando.

java.awt.* ti fornirà solo le classi in quel pacchetto esatto e non i pacchetti nidificati. Immagina il nome delle collisioni spaziali coinvolte con il seguito!

import com.*

Va notato che è considerato una cattiva pratica da usare *. Sono preferite le importazioni di nomi di classi esplicite.

Per ulteriori letture: Wikipedia: Namespace (Informatica)