Chúng tôi đang tái cấu trúc một phương pháp dài; nó chứa một vòng lặp dài for
với nhiều câu lệnh continue
. Tôi chỉ muốn sử dụng phương pháp trích xuất Phương pháp trích xuất, nhưng cách tự động hóa của Eclipse không biết cách xử lý phân nhánh có điều kiện. Tôi cũng vậy.Phương pháp trích xuất với tiếp tục
chiến lược hiện tại của chúng tôi là giới thiệu một keepGoing
cờ (một biến Ví dụ vì chúng ta sẽ muốn phương pháp chiết xuất), đặt nó là sai ở đầu vòng lặp, và thay thế tất cả tiếp tục thiết lập các cờ thành true, sau đó gói tất cả các nội dung sau (ở các mức lồng nhau khác nhau) trong mệnh đề if (keepGoing)
. Sau đó thực hiện các trích xuất khác nhau, sau đó thay thế các nhiệm vụ keepGoing
với lợi nhuận ban đầu từ các phương thức được trích xuất, sau đó loại bỏ cờ.
Có cách nào tốt hơn không?
Cập nhật: Đáp lại bình luận - Tôi không thể chia sẻ mã, nhưng đây là một đoạn trích nặc danh:
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();
}
}
}
}
có thể đăng mã không? –
bạn có thể cung cấp ví dụ viết tắt không? – akf
Wow ... Tôi chắc chắn có thể thấy lý do tại sao bạn muốn tái cấu trúc nó. –