在重构我的代码时,我意识到除了异常处理之外,还会重复一些代码。我想知道这些代码是否被认为是重复重构,如果是的话,怎么样?
具体样本: 例如,我有两种方法。
void fun1() {
try {
foo();
} catch (Exception ex) {
handle1();
}
}
void fun2() {
try {
foo();
} catch (Exception ex) {
handle2();
}
}
答案 0 :(得分:0)
为什么不这样做:
try {
foo();
} catch (Exception1 ex) {
handle1();
} catch (Exception2 ex) {
handle2();
}
答案 1 :(得分:0)
好的,首先,抓住所有Exception
是一个坏习惯,你不应该真的这样做,只抓住你期望的那些。
我不认为它会重复,因为在一种情况下,您可能会在另一种情况下期待一个例外,您可能会期望另一个例外。这是你抓住条款中具体的另一个原因。然后,您还可以使用multiatch语句,如下所示:
void fun() {
try {
foo();
} catch (MyFirstException ex) {
handle1();
} catch (MySecondException ex) {
handle2();
}
}
答案 2 :(得分:0)
这里有一些重复,但并不多。通过将预期的错误处理函数作为参数传递给辅助方法,您可以更好地合并代码。请注意,在Java 8之前,这将更加冗长。
void fun1() {
funHelper(this::handle1);
}
void fun2() {
funHelper(this::handle2);
}
void funHelper(Runnable errorHandler) {
try {
foo();
} catch (Exception ex) {
errorHandler.run();
}
}