2012-01-07 19 views
5

quiero hacerEspecificación de excepción bypass java ...?

public class Settings 
{ 
    static final URL logo = new URL("http://www.example.com/pic.jpg"); 
    // and other static final stuff... 
} 

pero me dicen que necesito para manejar MalformedURLException. Las especificaciones dicen que MalformedURLException es

Se lanza para indicar que se ha producido una URL mal formada. O bien no se pudo encontrar un protocolo legal en una cadena de especificación o no se pudo analizar la cadena.

Ahora, sé que la URL que doy no está mal formada, por lo que prefiero no manejar una excepción que sé que no puede ocurrir.

¿Hay alguna forma de evitar el bloque try-catch innecesario que obstruye mi código fuente?

Respuesta

12

La respuesta más corta es no. Pero podría crear un método de utilidad estático para crear la URL por usted.

private static URL safeURL(String urlText) { 
    try { 
     return new URL(urlText); 
    } catch (MalformedURLException e) { 
     // Ok, so this should not have happened 
     throw new IllegalArgumentException("Invalid URL " + urlText, e); 
    } 
} 

Si necesita algo como esto de varios lugares, probablemente debería ponerlo en una clase de utilidad.

+0

simple y concisa. +1 para '// Ok, entonces esto no debería haber sucedido' – Perception

4

intente lo siguiente:

public class Settings 
{ 
    static final URL logo; 

    static 
    { 
     try 
     { 
      logo = new URL("http://www.example.com/pic.jpg"); 
     } 
     catch (MalformedURLException e) 
     { 
      throw new IllegalStateException("Invalid URL", e); 
     } 
    } 
    // and other static final stuff... 
} 
+0

Sí, gracias, conozco la sintaxis y la semántica de try-catch, ese no es el problema. Mi problema es que ** sé ** que la excepción nunca puede ocurrir, y es por eso que quiero evitar obstruir mi código fuente con try-catch-clauses innecesarias. En C++, simplemente ignoraría la excepción y el compilador no me molestaría al respecto, ¿verdad? En Java ... realmente creo que debería haber una manera de convencer al compilador de no aplicar la especificación de excepción en este caso, una directiva de compilación, si nada más ... – OppfinnarJocke

+0

@OppfinnarJocke Oh, no tenía intención de ofenderte -aunque no sabe acerca de los inicializadores estáticos. Desafortunadamente, no hay forma de decir que Java "simplemente se calle aquí": si existiera tal característica, las excepciones serían aún más complicadas de lo que están ahora. El punto es que cada característica interactúa con casi todas las demás. Tener excepciones mágicamente desconectadas significaría que el mismo código podría compilar o no compilar basándose en algo que ni siquiera ves. – alf

+0

Gracias alf. No me ofendí, lo siento si ocurrió de esa manera ... Sí, entiendo que apagar completamente la comprobación de excepciones podría estropear las cosas, pero una directiva de compilación para decir, como tú dices, "cállate aquí" parecería útil en estos raros (?) casos. De todos modos, utilizaré String y crearé la URL en otro lugar del código (donde try-catch parece más apropiado para mí). Muchas gracias. – OppfinnarJocke

Cuestiones relacionadas