Sie können es innerhalb einer statischen Funktion erstellen, solange Sie die Exception abfangen, die (potenziell) ausgelöst wird.
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;
}
}
}
Es gibt keine Möglichkeit, die Ausnahme zu erlauben, zu verbreiten, da es wirft eine geprüfte Ausnahme (und das ist illegal während der Initialisierung). Es gibt ein paar Möglichkeiten, das zu lösen ist:
Raise eine ungeprüfte Ausnahme: Dies bewirkt, dass ein java.lang.ExceptionInInitializerError
angehoben werden, wenn die Klasse zu laden versucht. Es kann verwirrend und schwer zu verfolgen und zu debuggen sein. Ich empfehle es nicht.
es Wechsel zu einem nicht-final-Variable, und erstellen Sie eine Funktion es zuzugreifen: Wenn das nicht-Finale Variable, können Sie überprüfen, ob es in der get-Set, und die geprüfte Ausnahme auslösen, wenn es nicht. Auf diese Weise kann (in der Tat erfordert) Ihren Code die Ausnahme an dem Punkt zu behandeln, wo es heißt:
public class MyClass {
private static Setter setter;
protected static synchronized Setter getSetter() raises FileNotFoundException {
if setter == null {
setter = new Setter();
}
return setter;
}
}
Im Allgemeinen, wenn etwas eine geprüfte Ausnahme auslöst, ist es nicht etwas, das Sie in einer statischen speichern möchten. –