Keine Möglichkeit, das zu tun, zumindest jetzt benutze ich eine solche Problemumgehung (vereinfacht):
%Vor%Und die Verwendung sieht folgendermaßen aus:
%Vor%Der Trick ist, dass die Schnittstelle "nie fertig ist" und jedes Mal, wenn ich irgendwo eine unkontrollierte Methode brauche, werde ich das Objekt in unchecked einbinden und IDE die Methodensignatur in der Schnittstelle erzeugen lassen.
Die Implementierung ist dann generisch (reflektierend und "langsam", aber normalerweise schnell genug)
Es gibt einige Code-Postprozessoren und Bytecode-Weber, aber das war nicht möglich (nicht einmal AOP oder andere jvm-basierte Sprache) für mein aktuelles Projekt, also wurde das "erfunden".
Projekt Lomboks @SneakyThrows
ist wahrscheinlich das, wonach Sie suchen. Umschließt Ihre Exception nicht wirklich (weil es in vielen Fällen ein Problem sein kann), es wirft keinen Fehler während der Kompilierung.
Sie können dies mit AspectJ tun. Sie deklarieren einen Joinpoint (in diesem Fall Aufruf der Methode foo) und "mildern" Sie die Exception.
Bearbeiten Um ein wenig dazu zu sagen:
Angenommen, Sie haben die folgende Klasse Bar
:
... und du hast einen Test wie folgt:
%Vor%Dann wird der Test offensichtlich nicht kompiliert. Es wird einen Fehler geben:
%Vor%Um dies mit AspectJ zu überwinden, schreiben Sie einen sehr einfachen Aspekt:
%Vor% Der Aspekt besagt grundsätzlich, dass jeder Code innerhalb eines Tests (dh eine Methode, die mit "test" in einer Klasse beginnt, die mit "Test" endet und "void" zurückgibt), die eine Ausnahme auslöst, vom AspectJ akzeptiert wird Compiler. Wenn eine Ausnahme auftritt, wird sie vom Compiler AspectJ umschlossen und als RuntimeException
geworfen.
Wenn Sie diesen Test als Teil eines AspectJ-Projekts innerhalb von Eclipse (mit installiertem AJDT) ausführen, ist der Test erfolgreich, während er ohne den Aspekt nicht einmal kompiliert wird.
Ich denke, es ist möglich mit Bytecode-Reengineering, kundenspezifischem Compiler oder vielleicht aspektorientierter Programmierung 1 . Im Gegensatz zu Java hat C # nur die Ausnahmen 2 .
Darf ich fragen, warum Sie die geprüften Ausnahmen unterdrücken möchten?
1 Nach Maarten Winkels ist das möglich.
2 und sie denken darüber nach, überprüfte einzuführen, so ein Kanal 9 Videos.
Bearbeiten: Für die Frage: Es ist in dem Sinne möglich, dass Sie Ihre Methoden mit Anmerkungen versehen können, um sie als Kandidaten für die Überprüfung der Ausnahmebedingung zu markieren. Dann verwenden Sie einen Kompilierzeit- oder Laufzeittrick, um die tatsächliche Unterdrückung / Umhüllung anzuwenden.
Da ich jedoch die Umgebung in Ihrem Fall nicht sehe, kann das Umbrechen einer Ausnahme auf diese Weise die Clients dieser Methode verwirren - sie sind möglicherweise nicht bereit, sich mit einer RuntimeException zu befassen. Beispiel: Die Methode löst eine IOException aus, und Ihre Clients fangen sie als FileNotFoundException ab, um einen Fehlerdialog anzuzeigen. Wenn Sie jedoch Ihre Exception in eine RuntimeException umbrechen, wird der Fehlerdialog nie angezeigt, und wahrscheinlich wird auch der Thread des Aufrufers beendet. (IMHO).
Sie können dies auf jeden Fall tun, indem Sie verwenden, dass Class.newInstance
nicht ein Exception
, das vom Konstruktor no-arg geworfen wird, in ein InvocationTargetException
umschließt; Stattdessen wirft es es leise :
Dann können Sie dieses Dienstprogramm überall verwenden:
%Vor%Übrigens ist das eine wirklich schlechte Idee :-)
Ich benutze das Komplettierungs- / Vorlagesystem von Eclipse, um jeden Codeblock einfach zu umbrechen.
Hier ist meine Vorlage:
%Vor%Tags und Links java annotations exception runtimeexception