2009-11-25 29 views
12

Digamos que pueda un conjunto de enunciados:Java: Try-Catch-Continue?

try { 
    String a = getProperty("a"); 
    String b = getProperty("b"); 
    String c = getProperty("c"); 
} catch(Exception e) { 

} 

Ahora, digamos no se encontró la propiedad b y la función lanza una excepción. En este caso, ¿cómo podría continuar o quizás establecer b en nulo sin tener que escribir un bloque try-catch para cada propiedad? Quiero decir, a, b, c existen, pero en algún momento es posible que no se encuentren en absoluto durante el cual se lanza una excepción.

Respuesta

19

Suponiendo que no puede cambiar la función para que devuelva nulo cuando no se encuentra la propiedad, está como pegado envolviendo todo en su propio bloque try catch, especialmente si quiere para cada valor que puede ser Obtenido a ser recuperada (. en lugar de dejar el primer valor que no logra cancelar toda la operación)

Si usted tiene una gran cantidad de estas propiedades para recuperar, tal vez sería más limpio para escribir un método de ayuda para utilizar:

String getPropertySafely(String key) { 
    try { 
     return getProperty(key); 
    } catch (Exception e) { 
     return null; 
    } 
} 
+0

¡Esto se ve muy interesante! Gracias – Legend

+1

Lo llamaría "getPropertyQuietly" solo porque usan esa convención de nomenclatura en el IO de Jakarta Commons (los métodos closeQuietly en la clase IOUtils) –

+4

+1 Ravi - Una de mis principales preocupaciones es tragar excepciones. Si va a hacerlo, al menos hágalo de forma obvia según el nombre del método. (Código de limpieza) – Elliot

7

Tienes que poner un try-catch alrededor de cada declaración. No hay continuación (como en los bloques ON ERROR ... RESUME en VB). En lugar de:

String a = null; 
try { 
    a = getProperty("a"); 
} catch(Exception e) { 
    ... 
} 
String b = null; 
try { 
    b = getProperty("b"); 
} catch(Exception e) { 
    ... 
} 
String c = null; 
try { 
    c = getProperty("c"); 
} catch(Exception e) { 
    ... 
} 

se podría escribir:

public String getPropertyNoException(String name) { 
    try { 
    return getProperty(name); 
    } catch (Exception e) { 
    return null; 
    } 
} 

Personalmente creo que un getProperty() es un mal candidato para lanzar excepciones sólo para todo esto repetitivo extra que se requiere

+1

Ah ... pensé que podría escapar usando un enfoque más simple ... Gracias ... – Legend

+1

Sí ... that getProperty viene de una biblioteca diferente y realmente no quería tocar esa parte. – Legend

5

dado que está utilizando la misma funcionar cada vez que puede ser capaz de poner esto en un bucle:

String[] abc = new String[3]; 
String[] param = {"a", "b", "c"}; 
for (int i = 0; i < 3; i++) { 
    try { 
     abc[i] = getProperty(param[i]); 
    } catch(Exception e) { 

    } 
} 

pero esto es bastante artificial y solo sería útil para un gran número de propiedades. Sospecho que tendrás que escribir 3 try-catch.

3

Debería reconsiderar cómo se maneja getProperty si planea usar muchos de ellos porque hay no es una forma sencilla de hacerlo.

Puede explotar la declaración finally pero aún necesita un try-catch para cada llamada.