JDK 1.7 Throwable `addSuppressed ()` - Methode

Gut, ich bekomme über Fragen, ich Lesen Sie den source-code von JDK 1.7, aber ich finde nicht die Antwort.

In dieser Frage möchte ich komplett ignorieren fillInStackTrace.

Ab JDK 1.4 initCause() Methode wurde Hinzugefügt. Zum Beispiel, wenn Sie Kern-Reflexion die Methode aufzurufen, die Sie erhält, InvocationTargetException mit der Ursache, die Ziel-Ausnahme in es.

Als ich sah, diese Funktion, die ich begann, es zu benutzen auch in ein Szenario wie dieses

    try {
        //contains some code that can throw new IOException();
    }
    catch(IOException e){
        throw new RuntimeException(e);
    }

So, ich fange eine Ausnahme, ich bin nicht bereit mit ihm zu beschäftigen und mich hier rethrow neue Ausnahme, wo ich ursprüngliche Ausnahme als die Ursache. In einigen scenarious keine RuntimeException, sondern meine eigene exception verwendet wird, also manchmal rufe ich auch an e.getCause() um richtig zu behandeln diese Ausnahme im äußeren block.

Dies ist der Fall im pre-JDK 1.7. Warum und Wann sollte ich addSuppressed()? Muss ich den code oben, um

    try {
        //contains some code that can throw new IOException();
    }
    catch(IOException e){
        RuntimeException re= new RuntimeException(e.getMessage());
        re.addSuppressed(e);
        throw re;
    }

Und als bonus-Frage, warum nicht addSuppressed() zurück Throwable als initCause() tut, um zu ermöglichen throw (RuntimeException)new RuntimeException().initCause(e);? Zum Beispiel, warum kann ich das nicht?:

    try {
        //contains some code that can throw new IOException();
    }
    catch(IOException e){
        throw (RuntimeException)new RuntimeException(e.getMessage()).addSuppressed(e);
    }

Ich extrahiert die Antwort auf einen eigenen post.

  • was haben Sie nicht verstehen, aus der javadoc der Methode in Frage? ich hatte noch nie gesehen, die addSuppressed() - Methode vor, aber eine schnelle Lesen der javadoc-deutlich gemacht, was sein Zweck ist. (Tipp, in Ihrem Beispiel verwenden Sie Fällen würde es keinen Sinn machen).
  • Gut, javadoc-war das nicht genug. Warum downvote die Frage?
  • warum war es nicht genug, was haben Sie nicht verstanden?
  • Ich fand das stackoverflow.com/questions/7860137/... wie sehr klare Erklärung, wie try-mit-Ressourcen-Funktion tatsächlich umgesetzt wird.
  • lassen Sie die Stimmen entscheiden über die Nützlichkeit dieser Frage und Antwort. Nur zur Erinnerung : blog.stackoverflow.com/2011/07/...
InformationsquelleAutor alexsmail | 2012-01-20
Schreibe einen Kommentar