Perché le classi InetAddress
, Inet4Address
e Inet6Address
non hanno costruttori visibili?Perché le classi Indirizzo Inet * non hanno costruttori visibili?
risposta
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; oppuregetAllByName()
, 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
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.
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.
- 1. Activator.CreateInstance - Come creare istanze di classi che hanno costruttori parametrizzati
- 2. Perché le classi nel modulo di threading Python espongono le funzioni di fabbrica anziché i costruttori?
- 3. Rende le classi interne visibili ad altri gruppi
- 4. Costruttori di classi parziali
- 5. Perché non posso applicare le classi derivate per avere costruttori senza parametri?
- 6. Le classi astratte hanno un VTABLE?
- 7. Perché le classi immutable.js non richiedono "nuovo"?
- 8. Perché Eclipse non sta aggiornando le classi?
- 9. Le funzioni C hanno un indirizzo di memoria fisso?
- 10. IntelliJ: Classi da vaso importato pacchetti all'interno non visibili
- 11. Se le interfacce non hanno costruttori, la classe Object è una super classe di un'interfaccia?
- 12. Perché non tutti i costruttori statici chiamati in C# (ad esempio quelli delle classi parent)?
- 13. Perché le tuple hanno use_allocator ma le coppie no?
- 14. Singleton - Perché usare le classi?
- 15. Perché le celle numeriche non hanno una proprietà .Characters()?
- 16. Perché le applet non hanno bisogno di main()?
- 17. Perché le istanze Python non hanno attributo __name__?
- 18. Perché le schede Bootstrap hanno role = "presentation"?
- 19. Perché propagate_on_XXX_assignment non si applica ai costruttori?
- 20. cosa fare se due librerie hanno esattamente le stesse classi?
- 21. Come proteggere le classi in modo che non siano visibili al di fuori del loro pacchetto
- 22. ogg-c - Le classi Swift non sono visibili nel file Objective-C .h
- 23. Costruttori su classi che estendono Eloquent
- 24. Perché le classi generate da JAXB hanno membri protetti e come posso modificarlo?
- 25. Le classi astratte in Scala hanno prestazioni migliori dei tratti?
- 26. Perché le classi statiche sono sigillate?
- 27. Costruttori in classi interne (implementazione di interfacce)
- 28. Ereditare costruttori di classi base virtuali
- 29. Classi sigillate di derisione senza costruttori pubblici?
- 30. C++ vettori di classi con costruttori
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
@edwardw - Sì, se si ha/intenzione di avere una connessione attiva all'indirizzo remoto. Ma non sarà sempre così. – aroth