2011-12-12 16 views

Respuesta

7

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; o
  • getAllByName(), 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
7

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.

+0

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

+0

@edwardw - Sí, si tiene/intenta tener una conexión activa a la dirección remota. Pero ese no siempre será el caso. – aroth

1

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.

Cuestiones relacionadas