È possibile crearlo all'interno di una funzione statica, a condizione che rilevi l'eccezione (potenzialmente) alza.
public class MyClass {
protected static final Setter setter = createSetter();
protected static Setter createSetter() {
try {
return new Setter();
} catch(FileNotFoundException e) {
// handle it appropriately
return null;
}
}
}
v'è alcun modo per consentire l'eccezione di propagare, poiché pone un'eccezione verificata (e che è illegale durante l'inizializzazione). Ci sono un paio di modi per affrontare questo:
sollevare un'eccezione incontrollato: Questo provoca un java.lang.ExceptionInInitializerError
per ottenere sollevato quando si cerca di caricare la classe. Può essere fonte di confusione e difficile da rintracciare e eseguire il debug. Non lo consiglio
Change ad una variabile non definitiva, e creare una funzione per accedervi: se non definitivo della variabile, è possibile verificare se è impostato in get, e sollevare l'eccezione controllato se non lo è. Questo permette (anzi, richiede) il codice per gestire l'eccezione nel punto in cui si chiama:
public class MyClass {
private static Setter setter;
protected static synchronized Setter getSetter() raises FileNotFoundException {
if setter == null {
setter = new Setter();
}
return setter;
}
}
fonte
2010-07-14 14:24:58
Generalmente se qualcosa genera un'eccezione controllata, non è qualcosa che si desidera memorizzare in una statica. –