2011-10-21 9 views
48

L'uso del pacchetto predefinito di Java è una cattiva pratica?L'uso del pacchetto predefinito di Java è una cattiva pratica?

+0

Ho vaghe memorie di problemi derivanti dall'utilizzo del pacchetto predefinito quando si tenta di riferirsi alle classi di quel pacchetto da altri pacchetti 'reali'. – Oliver

+4

Sì, a meno che non si stia scrivendo il codice throw-away. – aroth

+5

Dipende da cosa stai facendo. Per i compiti di classe Java, va bene. Qualcos'altro - basta metterlo in un pacchetto con nome e sei al sicuro. –

risposta

54

Sì, lo è. Idealmente, i nomi dei pacchetti dovrebbero essere unici a livello globale, per evitare conflitti di denominazione. L'utilizzo del pacchetto predefinito interrompe questa convenzione. È anche impossibile importare una classe dal pacchetto predefinito.

Perché esistono pacchetti senza nome, se è una cattiva idea? Da the JLS §7.4.2:

Unnamed packages are provided by the Java platform principally for convenience when developing small or temporary applications or when just beginning development.

+1

... Fino a quando qualcun altro ha lo stesso treno di pensiero come te. Qual è il problema con l'uso di un pacchetto con nome? –

+0

@irreputable Mi piace la tua logica. – Michael

+3

... sì, ma poi si sono preoccupati per le persone come me, così hanno deciso di non usarlo. – irreputable

1

Sì, lo è. Il problema è che non è possibile importare classi dal pacchetto predefinito.

20

Ci sono problemi a molti livelli diversi:

  • non è possibile importare classi nel pacchetto di default da classi che non sono
  • otterrete problemi di classe di carico se si prova a risolvere il pacchetto predefinito in più artefatti
  • non puoi più utilizzare l'ambito predefinito e protetto come normalmente puoi
  • non è ovvio distinzione tra il tuo codice e altro codice
3

Sì, lo è. Come hanno affermato altre risposte, non è possibile caricare classi dal pacchetto predefinito.

vedere così risponde:

How to import a class from default package
How to access java-classes in the default-package?

Tuttavia, log4j richiede che la configurazione si trova nel pacchetto di default. Questa è l'unica cosa che è ragionevole da mantenere lì.

Modifica: Come indicato da Sean Patrick Floyd e Michael nei commenti, è possibile inserire qualsiasi file di configurazione nel pacchetto predefinito. Grazie a tutti e due per avermelo fatto notare.

+3

Non solo log4j config, molti tipi di dati di configurazione. Ma non le classi Java –

+0

I file di configurazione Spring (applicationContext.xml) vanno spesso anche qui. – Michael

+1

@SeanPatrickFloyd sono commenti come questo che mi aiutano a migliorare le mie capacità! Grazie. –

Problemi correlati