Wir refaktorieren eine lange Methode; Es enthält eine lange for
Schleife mit vielen continue
Aussagen. Ich möchte nur die Extract-Methode Refactoring verwenden, aber Eclipse automatisierte ist nicht wissen, wie die bedingte Verzweigung zu behandeln. Ich auch nicht.Methode extrahieren mit fortfahren
Unsere aktuelle Strategie ist es, eine keepGoing
Flag (eine Instanzvariable, da wir zu Extrakt Methode wollen gehen) einzuführen, setzen Sie es an der Spitze der Schleife falsch, und ersetzen Sie alle weiterhin mit der Flagge Einstellung zu wahr, dann alle folgenden Sachen (auf verschiedenen Verschachtelungsebenen) in eine if (keepGoing)
Klausel einwickeln. Führen Sie dann die verschiedenen Extraktionen durch, ersetzen Sie dann die keepGoing
Zuordnungen mit frühen Rückgaben aus den extrahierten Methoden, und entfernen Sie dann die Markierung.
Gibt es einen besseren Weg?
aktualisieren: Als Reaktion auf die Kommentare - Ich kann den Code nicht teilen, aber hier ist ein anonymisierter Auszug:
private static void foo(C1 a, C2 b, C3 c, List<C2> list, boolean flag1) throws Exception {
for (int i = 0; i < 1; i++) {
C4 d = null;
Integer e = null;
boolean flag2 = false;
boolean flag3 = findFlag3(a, c);
blahblahblah();
if (e == null) {
if (flag1) {
if (test1(c)) {
if (test2(a, c)) {
Integer f = getF1(b, c);
if (f != null)
e = getE1(a, f);
if (e == null) {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
}
} else {
Integer f = getF2(b, c);
if (f != null)
e = getE2(a, f);
if (e == null) {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
}
flag2 = true;
}
} else {
if (test3(a, c)) {
Integer f = getF2(b, c);
if (f != null)
e = getE2(a, f);
if (e == null) {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
}
flag2 = true;
} else {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
flag2 = true;
}
}
}
if (!flag1) {
if (d == null) {
list.add(b);
continue;
}
e = findE(d);
}
}
if (e == null) {
list.add(b);
continue;
}
List<C2> list2 = blahblahblah(b, list, flag1);
if (list2.size() != 0 && flag1) {
blahblahblah();
if (!otherTest()) {
if (yetAnotherTest()) {
list.add(b);
continue;
}
blahblahblah();
}
}
}
}
ist es möglich, den Code zu veröffentlichen? –
Können Sie ein abgekürztes Beispiel angeben? – akf
Wow ... Ich kann sicher sehen, warum Sie es umgestalten wollen. –