ExceptionHandling (weiter werfen und so)



  • Hallo!

    Ich habe ein Modul, daß bestimmte Aufgaben erledigt. Dabei kann schonmal was schief gehen und es fliegt ne Exception. Innerhalb des Moduls empfinde ich es praktisch verschiedene ExceptionTypen zu haben, genau wiedergeben was schief gegangen ist. Wenn die Exceptions aber mein Modul verlassen, dann nützen mir diese Details nichts mehr und fordern nur unnötig lange Exception-Spezifikationen.

    Ich kann die Exceptions leider auch nicht alle von einer Basisklasse erben lassen, dan manche davon nicht von mir sind (IOException etc.).

    In C++ würde ich sie an der Modulgrenze wohl einfach fangen und eine einzige Sorte weiter werfen. Wie ist der kanonische Java-Weg?

    1. Ich baue um alle Stellen, die was werfen was nicht in meine Exception-Hierarchie reinpaßt, ein try catch und schmeiße von dort gleich eine Exception aus meiner Hierarchie.

    Problem: Der Stacktrace geht wohl schon innerhalb des Moduls verloren

    1. Ich fange an der Modulgrenze alles ab und werfe einheitlich weiter

    Nachteil: Der Stacktrace geht immer noch verloren (immerhin aber erst beim Verlassen des Moduls)

    1. Die ultimativ schlaue Java-Lösung, die ihr mir jetzt verratet. 🙂

    <-- hier könnte Ihre Lösung stehen! -->

    Danke schonmal im Voraus für Eure Einsichten, Erfahrungen und Tips.
    MfG Jester



  • Hi,

    der Stacktrace geht nicht verloren wenn du z.B. IOException in deine ModuleException packst.

    ms



  • Jup. Sieht dann so aus:

    Exception in thread "main" ModuleException: javax.print.PrintException: java.io.IOException
    	at ModuleException.main(Test.java:14)
    Caused by: javax.print.PrintException: java.io.IOException
    	at ModuleException.main(Test.java:15)
    Caused by: java.io.IOException
    	at ModuleException.main(Test.java:16)
    
    class ModuleException extends Exception
    {
    	public ModuleException(Exception cause)
    	{
    		super(cause);
    	}
    
    	public static void main(String[] args)
    		throws ModuleException
    	{
    		throw new ModuleException(
    				new javax.print.PrintException(
    						new java.io.IOException() ) );
    	}
    }
    

Anmelden zum Antworten