2011-03-09 22 views
8

Necesito crear un objeto de algún tipo. La clase del objeto tiene solo un constructor (uno que he escrito).¿Podemos detener la ejecución de un constructor?

Mi programa recibe solicitudes para crear instancias de un objeto con un ID de parámetro. Quiero detener el constructor si el parámetro ID contiene un carácter que no es un dígito.

No puedo verificar el parámetro antes, ya que no soy el que llama al constructor.

Respuesta

4

Cómo resolver esto depende de lo que quiere que suceda cuando se da un carácter ilegal, que a su vez depende de qué objeto estamos hablando, y cómo la biblioteca de consumo lo está utilizando.

Lo más razonable sería arrojar un IllegalArgumentException, y esto es lo que le sugiero que haga.

Sin embargo, podría tener sentido solo return null, aunque lo recomiendo encarecidamente (no puede hacerlo directamente en el constructor, pero puede crear un método de fábrica que lo haga).

+6

'return null'? – biziclop

+0

Esto es lo siguiente: digamos que tengo dos clases. Clase VIPcontacto que deriva de la clase Contacto. El constructor de clase VIPcontact llama al constructor Contact. it (Contact constructor) comprueba si el parámetro es válido. – SapG

+1

No puedo "devolver nulo" porque el tipo de devolución del contructor es nulo. – Loda

6

La única forma de "detener" un constructor consiste en lanzar una excepción. Teniendo en cuenta, por supuesto, que la persona que llama debe "conocer" esta excepción y ser capaz de manejar el caso donde el constructor falla.

lanzar una excepción desde el constructor no se detiene el objeto que está siendo creado embargo, sólo hace que la asignación de su referencia a una variable fallar y la referencia Unavaliable (y por lo tanto aptos para reciclaje) menos que hacen que el error de pasar this a un método externo desde el propio constructor. (Que no debe hacer de todos modos.)

19

Haga que el constructor sea privado y exponga un método de fábrica estático, que validará y devolverá una nueva instancia del objeto si el parámetro es válido.

+1

+1 Esta es de hecho la solución ideal si también puede cambiar el código de la persona que llama. – biziclop

Cuestiones relacionadas