Best Practice Mehrstufige Fehlerbehandlung

minimilan

Neues Mitglied
Hallo zusammen, ich bin Java-Neuling und habe die Aufgabe bekommen, eine Anwendung in Java neu zu implementieren. Hierzu habe ich das folgende C++-Coding vorliegen:

Code:
UX_MONITOR_START_MEASUREMENT

InuConnection oIc = InuConnectionManager::getInstance()->createConnection(strInuaddr);
if(!oIc) goto end;

InuStream oIs = oIc->open();
if(!oIs) goto unwind_inu;

ArtemisStream oAs = new InuToArtemisStreamAdapter(oIs);
if(!oAs) goto unwind_artemis;

// ...

cleanup:
oAs->close();
delete oAs;

unwind_artemis:
oIs->close();
delete oIs;

unwind_inu:
oIc->close();
delete oIc;

end:
UX_MONITOR_STOP_MEASUREMENT

Meine Implementierung in Java sieht nun folgendermaßen aus (Die anderen verwendeten Klassen bestehen bereits und dürfen nicht angepasst werden):

Code:
UxMonitor.startMeasurement(this.getClass());

try{
  InuConnection ic = InuConnectionManager.getInstance().createConnection(inuaddr);
  InuStream is = ic->open();
  ArtemisStream as = new InuToArtemisStreamAdapter(is);
}
catch(InuConnectionFailed ex1) {
  UxMonitor.stopMeasurement();
  return;
}
catch(IOException ex2) {
  if (is != null) is.close();
  ic.close();

  UxMonitor.stopMeasurement();
  return;
}

// ...

if( ... ) {
  as.close();
  is.close();
  ic.close();
  UxMonitor.stopMeasurement();
  return;
}

// ...

as.close();
is.close();
ic.close();
UxMonitor.stopMeasurement();

Das Problem ist, dass dieser Code viel schlechter lesbar ist als die C++-Version. Gibt es hier irgendeinen Trick, das einfacher zu schreiben?
 

tommysenf

Top Contributor
Java:
UxMonitor.startMeasurement(this.getClass());
try (InuConnection ic = InuConnectionManager.getInstance().createConnection(inuaddr);
      InuStream is = ic.open();
      ArtemisStream as = new InuToArtemisStreamAdapter(is)) {
       
       // ...

}
UxMonitor.stopMeasurement();
 

mrBrown

Super-Moderator
Mitarbeiter
Übersichtlichkeit kann man vermutlich noch durch extrahieren von Methoden schaffen.

Außerdem wäre es ne Überlegung wert, UxMonitor in Closeable zu wrappen, damit man den auch im Fehlerfall schließen lässt.


Och, dass sehen Java Programmierer nicht so eng

SCNR
Ich hoffe einfach mal, dass da *sehr* viel Ironie drin steckt...
 

Ähnliche Java Themen

Neue Themen


Oben