2011-12-12 15 views

risposta

7

Perché è una classe di fabbrica. L'uso di metodi statici per restituire un'istanza di fabbrica ha senso quando ci sono un piccolo numero di situazioni in cui si desidera creare tale oggetto.

Quindi, invece di sovraccaricare il costruttore fino al punto in cui dovrete ricordare tutti i tipi di combinazioni bizzarre di argomenti da utilizzare per ogni situazione data, vi dà solo un metodo (sperabilmente ben chiamato) per situazione.

In questo caso, è possibile creare un oggetto con una delle:

  • getLocalHost(), ottenere il proprio indirizzo;
  • getByName(), ottenendo l'indirizzo "primario" per un sito; oppure
  • getAllByName(), ottenendo un elenco degli indirizzi.

Questo non è un elenco esaustivo, vedere here per più di loro, cercare la pagina per:

Methods in java.net that return InetAddress
7

Perché non sono pensati per essere istanziati direttamente (e questo è in effetti uno schema utile da conoscere). Invece si intende utilizzare i vari metodi "factory" forniti dall'API per ottenere un'istanza. Controllare la documentazione:

http://docs.oracle.com/javase/1.5.0/docs/api/java/net/InetAddress.html

In particolare, prestare attenzione ai statici getBy...() metodi.

+0

Oppure dall'istanza '' 'java.net.Socket''': [getInetAddress] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#getInetAddress()) e [getLocalAddress] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#getLocalAddress()). – edwardw

+0

@edwardw - Sì, se si ha/intenzione di avere una connessione attiva all'indirizzo remoto. Ma non sarà sempre così. – aroth

1

Inet4Address e Inet6Address hanno costruttori di default che è unico pacchetto visibile, e quindi possono vedere InetAddress esso.

Il motivo per cui InetAddress non dispone di un costruttore è perché InetAddress è un Flyweight pattern che espone Factory methods recuperare rilevanti InetAddress sottoclasse in base all'indirizzo fornito.

Problemi correlati