具有不同异常处理的相同代码是否被视为重复代码?

时间:2014-12-02 18:10:18

标签: java coding-style

在重构我的代码时,我意识到除了异常处理之外,还会重复一些代码。我想知道这些代码是否被认为是重复重构,如果是的话,怎么样?

具体样本: 例如,我有两种方法。

void fun1() {
    try {
        foo();
    } catch (Exception ex) {
        handle1();
    }
}

void fun2() {
    try {
        foo();
    } catch (Exception ex) {
        handle2();
    }
}

3 个答案:

答案 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();
    }
}