2012-01-07 13 views
5

voglio fareIgnora specifica eccezione java ...?

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

ma ho detto che ho bisogno di gestire MalformedURLException. Le specifiche dicono che MalformedURLException è

Gettato per indicare che si è verificato un URL non valido. Nessun protocollo legale può essere trovato in una stringa di specifiche o la stringa non può essere analizzata.

Ora, so che l'URL che ho dato non è malformato, quindi preferisco non gestire un'eccezione che so non può verificarsi.

Esiste comunque la possibilità di evitare l'inutile blocco try-catch-block che intasa il mio codice sorgente?

risposta

12

La risposta più breve è no. Ma potresti creare un metodo di utilità statico per creare l'URL per te.

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); 
    } 
} 

Se avete bisogno di qualcosa come questo da diversi luoghi probabilmente si dovrebbe metterlo in una classe di utilità.

+0

semplice e concisa. +1 per '// Ok, quindi questo non dovrebbe essere successo ' – Perception

4

provare quanto segue:

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ì, grazie, conosco la sintassi e la semantica di try-catch, non è questo il problema. Il mio problema è che ** so ** che l'eccezione non può mai verificarsi, motivo per cui voglio evitare di intasare il mio codice sorgente con clausole try-catch non necessarie. In C++ semplicemente ignorerei l'eccezione e il compilatore non mi tormenterebbe, vero? In Java ... penso davvero che ci dovrebbe essere un modo per convincere il compilatore a non far rispettare le specifiche dell'eccezione in questo caso, una direttiva del compilatore, se non altro ... – OppfinnarJocke

+0

@OppfinnarJocke Oh, non intendevo offenderti -anche se non si sappia degli inizializzatori statici. Sfortunatamente, non c'è modo di dire che Java "sta semplicemente zitto qui": se esistesse una funzione del genere, le eccezioni sarebbero ancora più un disastro di quanto non lo siano in questo momento. Il punto è che ogni funzionalità interagisce quasi con tutte le altre. Avere magicamente disattivate le eccezioni significherebbe che lo stesso codice potrebbe compilare o non compilare basandosi su qualcosa che non si vede nemmeno. – alf

+0

Grazie alf. Non mi sono offeso, mi spiace se si è imbattuto in questo modo ... Sì, ho capito che spegnere completamente il controllo delle eccezioni poteva rovinare tutto, ma una direttiva del compilatore per dire, come dici tu, "stare zitto qui" sembrerebbe utile in questi rari (?) casi. Comunque, userò String invece e creerò l'URL altrove nel codice (dove try-catch sembra più appropriato per me). Molte grazie. – OppfinnarJocke