2012-08-26 12 views
7

Studiando Java, ho pensato a una, per me, proprietà piuttosto confusa di molti tutorial. Considerare i seguenti due importazioni da un tutorial di esempio:Non dovrebbe "import foo. *" Includere anche il pacchetto secondario "foo.bar. *"?

import java.awt.*; 
import java.awt.event.*; 

La prima linea importa ovviamente il pacchetto java.awt, e subpackage il secondo AWT. Ma l'asterisco non dovrebbe includere tutti i sotto-pacchetti? Quindi, la prima linea dovrebbe fare il trucco - la linea due non dovrebbe essere necessaria? In caso contrario: quindi qual è il vero scopo/utilizzo dell'asterisco?

Ad esempio, utilizzando SELECT * FROM foo in MySQL seleziona TUTTI i campi da una tabella, forse sono stupido supporre che questo sia naturalmente il caso.

+1

Viene utilizzato per importare tutte le classi nel pacchetto dato (ad esempio tutte le classi in 'java.awt'), non i sotto-pacchetti e le loro classi. – Baz

risposta

13

No, i colli sono considerati nel loro insieme. Anche se è spesso utile considerarli gerarchicamente, non esiste alcuna nozione all'interno del linguaggio Java o compilazione che dice che java.awt.eventappartiene ajava.awt.

Il confronto con le tabelle SQL non è corretto poiché non esiste una tabella secondaria nei database SQL. Invece, Immagina di avere una tabella che rappresenta tutte le classi, con le seguenti voci:

ID | Package | Name 
-------------------------- 
1 | awt  | SomeClassName1 
2 | awt.event | SomeClassName2 

Ora, se si voleva ottenere classi AWT, si direbbe:

SELECT * FROM MyTable WHERE Package = 'awt' 

Non lo faresti aspettati che questo ti dia entrambe le voci, solo perché il nome del pacchetto inizia conawt, vuoi?

+0

Davvero, davvero una buona risposta! Molte grazie! – Zar

0

Vedere la risposta here (e il mio commento). Un carattere jolly va solo a livello 1 profondo, non in sottopackages

0

Ogni nome di pacchetto ("a.b.c") è un pacchetto discreto. Due pacchetti con prefisso di denominazione simile ("a.b.c" e "a.b.d", ad esempio) sono pacchetti separati per la lingua, sia per gli spazi dei nomi che per il controllo di accesso.

Per gli esseri umani, ovviamente, questo rappresenta una possibile relazione tra i pacchetti.

Problemi correlati