2010-03-25 19 views
47

Tome este método¿Qué excepción arrojar cuando falta un parámetro/dependencia importante?

/** 
* @return List of group IDs the person belongs to 
* 
*/ 
public List<String> getGroups() { 
    if (this.getId().equals("")) return null; 
} 

me gustaría lanzar una excepción en lugar de regresar nula, ¿cuál es la excepción a tirar cuando un parámetro importante/dependencia no se ha establecido?

+6

Este código levantará un NPE si 'getID()' devuelve nulo. Sería mejor usar 'if (" ".equals (this.getId())) ...' –

+0

Tengo eso definido en una clase abstracta y hay una captura de prueba dentro, y devolverá cadena vacía en caso de falla. – Pentium10

Respuesta

71

Utilizaría IllegalArgumentException si el parámetro/argumento está controlado desde el exterior, o IllegalStateException si el método se acaba de llamar en un momento incorrecto (estado). En su caso específico, creo que es el último. Una alternativa (dudosa) es NullPointerException.

Sin embargo, esto debe documentarse explícitamente en el @throws para que el usuario entienda el motivo.

+0

El contexto de la pregunta es realmente limitado. Por lo que puedo ver, el ISE es la mejor opción. También lo afirmé explícitamente, así que no veo cómo es eso malo :) – BalusC

+0

¿Existe alguna posibilidad mágica de cómo actualizar la sección de comentarios en Eclipse para regenerar automáticamente los @params faltantes y agregar la sección @throws? Tal vez un atajo? – Pentium10

+0

Lo siento, no lo sé. Se agregará automáticamente para excepciones que no sean de tiempo de ejecución (cuando genere/actualice la cláusula 'throws'), pero no para excepciones de tiempo de ejecución. – BalusC

2

Usaría una IllegalStateException porque la identificación es el estado del propietario. Si el ID hubiera pasado como parámetro, una IllegalArgumentException sería correcta.

0

Crearía mi propio tipo de excepción extendiendo Exception. De esta forma, las funciones de llamada pueden captar esa Excepción particular y manejarla con gracia, según corresponda. Tenga en cuenta que puede hacer lo mismo con casi cualquier cosa que extienda la excepción, pero prefiero crear mis propias clases de excepción para que pueda ser muy robusto en mi manejo de excepciones. Esto es, por supuesto, depende de ti.

+0

¿Por qué reinventar la rueda? IllegalArgumentException se hace exactamente para un argumento ilegal. –

+0

Depende de cuántos tipos diferentes de argumentos ilegales quieras atrapar. Me gusta ampliar Excpetion, o en este caso IllegalArgumentException solo para tener una clase de excepción específica para tratar con los diferentes tipos de condiciones que quiero tratar. Hace que el procesamiento de excepciones sea más fácil y más sólido, en mi humilde opinión. -Jay – Jay

2

Si no es posible garantizar que el ID esté siempre configurado (requiriéndolo en el constructor por ejemplo, donde puede verificar que se haya pasado una identificación válida), entonces creo que las otras sugerencias para arrojar IllegalStateException son correctas. Pero sería mejor intentar y asegurarse de que su objeto no pueda entrar en este estado en primer lugar si es posible

1

En lugar de lanzar una excepción, simplemente debe devolver una lista vacía. Si no se cumple una dependencia/parámetro, entonces no hay resultados. De los comentarios y el código publicado, parece que ese es el comportamiento esperado. Si la identificación está vacía, entonces no hay grupos adjuntos, por lo tanto, una lista vacía.

Cuestiones relacionadas