2013-02-09 16 views
5

Stavo guardando il codice di un'altra persona e lo codificano utilizzando i nomi dei pacchetti.utilizzando il nome del pacchetto per creare oggetti in Java

String filename = ""; 

java.io.PrintWriter writer; 

writer = new java.io.PrintWriter(new java.io.FileWriter(filename)); 

è la sintassi l'equivalente se non fosse stato codificato con il nome del pacchetto? C'è qualche uso che lo codifica con i nomi dei pacchetti da quando Java lo consente?

risposta

8

Devi usare i nomi dei pacchetti (o "nomi pienamente qualificati" - questo si riferisce al nome del pacchetto e il nome della classe insieme) se:

  1. È necessario utilizzare due classi con lo stesso nome nello stesso file sorgente.
  2. Non hai import le classi che stai utilizzando per qualsiasi motivo. (Di solito follia.)
  3. È import e le classi stanno ancora utilizzando i nomi dei pacchetti comunque perché non lo so.
+1

+1 per il motivo sospetto di # 2 :) – fvu

+0

con classi con lo stesso nome nello stesso file sorgente. quindi è possibile codificarlo in quel modo (sembrerebbe ancora una follia). Grazie! – Nicholas

+0

@Nicholas È un modo perfettamente valido per scrivere Java, è solo - nella mia esperienza - molto, molto raramente * necessario * e meno leggibile rispetto all'uso di 'import's per chiunque abbia una familiarità passeggera con il JDK. Da qui il commento "follia". – millimoose

3

Si potrebbe non utilizzare il nome del pacchetto e il codice sarebbe ancora essere esattamente lo stesso, si sarebbe solo devono importare la classe dalla confezione java.io nella parte superiore del vostro programma:

import java.io.PrintWriter; 
import java.io.FileWriter; 

String filename = ""; 
PrintWriter writer; 

writer = new PrintWriter(new FileWriter(filename)); 
+0

+1 per indicare un'altra sintassi di fare la stessa cosa – Nicholas

3

Puoi scrivi il nome della classe includendo il suo pacchetto come modo per evitare ambiguità, diciamo che ci sono due classi chiamate PrintWriter nel tuo programma che scrivono java.io.PrintWriter prenderà quella da java.io.

Non è una vera sorpresa che anche nelle classi "standard" ci siano alcuni nomi duplicati - es. Data esistente in java.util e java.sql, Queue esiste in java.util e javax.jms - così farai incontrare questa costruzione di volta in volta.

+0

oh capisco! Questo è abbastanza pulito di Java! – Nicholas

7

Utilizzando fully-qualified names è semanticamente lo stesso come se le classi indicate erano importati.

Un possibile utilizzo di FQN è se è necessario lavorare con due classi con lo stesso nome, ma in diversi pacchetti .

import java.util.Date; 

Date date = new Date(); 
java.sql.Date sqlDate = new java.sql.Date(date); 
+0

+1 Bel esempio! – Nicholas

Problemi correlati