¿Por qué las clases InetAddress
, Inet4Address
y Inet6Address
no tienen constructores visibles?¿Por qué las clases de dirección Inet * no tienen constructores visibles?
Respuesta
Porque es una clase de fábrica. El uso de métodos estáticos para devolver una instancia de fábrica tiene sentido cuando hay un pequeño número de situaciones en las que deseará crear dicho objeto.
Por lo tanto, en lugar de sobrecargar el constructor hasta el punto en que tendrá que recordar todo tipo de combinaciones extrañas de argumentos para cada situación, solo le dará un método (por suerte bien nombrado) por situación.
En este caso, puede crear un objeto con uno de:
getLocalHost()
, obtener su propia dirección;getByName()
, obteniendo la dirección "principal" para un sitio; ogetAllByName()
, obteniendo una lista de las direcciones.
Ésta no es una lista exhaustiva, ver here durante más de ellos, buscar esa página para:
Methods in java.net that return InetAddress
Porque no están destinados a crear instancias directamente (y este es, de hecho, un patrón útil para saber). En su lugar, debe usar los diversos métodos de "fábrica" provistos por la API para obtener una instancia. Compruebe la documentación:
http://docs.oracle.com/javase/1.5.0/docs/api/java/net/InetAddress.html
En particular, prestar atención a las getBy...()
métodos estáticos.
Inet4Address
y Inet6Address
tienen constructores por defecto que es único paquete visible, y por lo tanto se puede ver InetAddress
eso.
La razón por la InetAddress
no tiene un constructor es porque InetAddress
es una Flyweight pattern que expone Factory methods para recuperar relevante InetAddress
subclases en base a la dirección indicada.
- 1. ¿Por qué las clases abstractas en Java tienen constructores?
- 2. por qué un constructores estáticos no tienen ningún parámetro
- 3. Jython diciendo "No hay constructores visibles para la clase"
- 4. Activator.CreateInstance - Cómo crear instancias de clases que tienen constructores parametrizados
- 5. ¿Por qué las tuplas tienen uses_allocator pero los pares no?
- 6. ¿Por qué Eclipse no actualiza las clases?
- 7. C++ Los constructores no tienen ningún tipo de devolución. ¿Exactamente por qué?
- 8. ¿Por qué las listas de Scala no tienen un pedido?
- 9. ¿Constructores en clases abstractas?
- 10. ¿Por qué las clases generadas por JAXB tienen miembros protegidos y cómo puedo cambiar esto?
- 11. ¿Por qué las continuaciones no tienen una utilidad útil?
- 12. selección jQuery de elementos que no tienen hijos visibles
- 13. ¿Por qué las clases no están selladas por defecto?
- 14. ASP MVC: ¿Por qué mis clases internas no son visibles desde mis Vistas?
- 15. ¿Por qué los registros de Delphi no tienen herencia?
- 16. Si las interfaces no tienen constructores, ¿la clase de objeto es superclase de una interfaz?
- 17. ¿Las clases abstractas tienen un VTABLE?
- 18. ¿Por qué C no admite tipos genéricos implícitos en los constructores de clases?
- 19. ¿Por qué deberían los constructores de clases abstractas estar protegidos, no públicos?
- 20. Campos protegidos no visibles para las subclases
- 21. ¿Por qué las clases de Java no heredan las anotaciones de las interfaces implementadas?
- 22. ¿Por qué las clases internas hacen accesibles los métodos privados?
- 23. ¿Por qué no puedo aplicar clases derivadas para tener constructores sin parámetros?
- 24. Java: ¿por qué las clases System y Runtime tienen métodos idénticos?
- 25. ¿Por qué las clases internas no pueden declarar miembros estáticos?
- 26. ¿Por qué Eclipse no genera javadoc para todas las clases?
- 27. ¿Las clases de elementos HTML tienen prefijos según su uso?
- 28. ¿Por qué Android prefiere las clases estáticas
- 29. SQLMetal genera clases pero no constructores sin parámetros
- 30. ¿Qué licencia tienen las RFC?
O consiga de la instancia '' 'java.net.Socket''': [getInetAddress] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#getInetAddress()) y [getLocalAddress] (http://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#getLocalAddress()). – edwardw
@edwardw - Sí, si tiene/intenta tener una conexión activa a la dirección remota. Pero ese no siempre será el caso. – aroth