Ich möchte eine gemeinsam genutzte Bibliothek die Ausnahmen von innerhalb umbrechen und es als eine anwendungsspezifische Ausnahme für diejenigen, die nicht mit ihnen umgehen können.Ist es in Ordnung, eine anwendungsspezifische Ausnahme aus einer benutzerdefinierten gemeinsam genutzten Bibliothek zu werfen?
Was ich zur Zeit habe, ist eine Bibliotheksausnahme mit einer statischen Methode, die die anwendungsspezifische Ausnahmeklasse einrichtet, die ich über Reflektion instanziiere, falls eine Ausnahme ausgelöst wird.
Mein Ziel ist es, eine einzelne App spezifische Ausnahme, die durch einen gemeinsamen Code würdevoll behandelt werden können.
Gibt es einen besseren Weg, dies zu tun?
lib.LibExUtil.java
class LibExUtil {
static Class<? extends RuntimeException> ex = RuntimeException.class;
public static setAppEx(Class<? extends RuntimeException> ex) {
this.ex = ex;
}
static RuntimeException wrap(Throwable t) {
return (RuntimeException)ex
.getDeclaredConstructor(new Class[] {Throwable.class}).newInstance(new Object[] {t})
}
}
lib.SomeUtil.java
static void utilMethod() {
try {
// code with checked exception
} catch (Exception ex) {
throw LibExUtil.wrap(ex);
}
}
myApp.MyAppEx.java
public class MyAppEx extends RuntimeException {
MyAppEx(Throwable t) {super(t);}
}
myApp.Client.java
// initialization
LibExUtil.setAppEx(myApp.MyAppEx.class); // optional
void method() {
SomeUtil.utilMethod();
}
Nur hinzufügen, diese Methode ermöglicht alles, was Ihre gemeinsam genutzte Bibliothek verwendet, um die Ausnahme in einer für diese Komponente geeigneten Weise zu behandeln. Später möchten Sie vielleicht, dass eine Komponente eine RuntimeException für den Fehler von utilMethod() auslöst, eine andere die Exception behandelt und weitergeht, dann eine andere, um die LibraryException einfach auf eine höhere Komponente zu werfen. Je detaillierter Ihre Ausnahmebehandlung ist, desto einfacher ist es, ein Problem zu beheben, wenn Ihr Projekt größer wird. –
App-spezifische Funktionalität kann nicht in einer gemeinsam genutzten Bibliothek sein, aber sind Laufzeitwerte enthalten? Was ist, wenn die gemeinsam genutzte Bibliothek niemals mit mehreren Apps im selben jvm ausgeführt wird? Ich wollte die Client-Anrufe sauberer machen, indem ich nicht direkt mit der geprüften util-Ausnahme umgehen musste. Ich werde die Frage in Kürze mit Details aktualisieren. –
Ich versuche, den Bloat mit dem try-catch-Block zu vermeiden, util-Aufrufe sind normalerweise One-Liner. –