首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在java 8中将catch重新组合成一个方法?

如何在java 8中将catch重新组合成一个方法?
EN

Stack Overflow用户
提问于 2019-01-04 14:51:15
回答 3查看 260关注 0票数 9

对于java 8,我想对下面的代码进行优化:

代码语言:javascript
复制
public Response create() {
    try{
        ...
    } catch (Exception e) {
        codeA;
    } finally {
        codeB;
    }
}

public Response update() {
    try{
        ...
    } catch (Exception e) {
        codeA;
    } finally {
        codeB;
    }
}

我有很多方法使用同样的方法来捕获异常,最后,是否可以用java 8中的方法替换下面的公共代码?这样我就可以优化使用这些通用代码的所有方法。

代码语言:javascript
复制
} catch (Exception e) {
    codeA;
} finally {
    codeB;
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-04 14:53:41

这取决于您在...中做了什么。你可以这样做:

代码语言:javascript
复制
private Response method(Supplier<Response> supplier) {
    try{
        return supplier.get();
    } catch (Exception e) {
        codeA;
    } finally {
        codeB;
    }
}

并引用如下:

代码语言:javascript
复制
public Response create() { return method(() -> { ... for create }); }
public Response update() { return method(() -> { ... for update }); }
票数 15
EN

Stack Overflow用户

发布于 2019-01-04 14:55:55

您可以包装您的payload并将其放到单独的方法中。一件事,你期望在异常捕获时返回什么。这一次是null,但是您可能可以提供默认值。

代码语言:javascript
复制
public static <T> T execute(Supplier<T> payload) {
    try {
        return payload.get();
    } catch(Exception e) {
        // code A
        return null;
    } finally {
        // code B
    }
}

客户端代码可能如下所示:

代码语言:javascript
复制
public Response create() {
    return execute(() -> new CreateResponse());
}

public Response update() {
    return execute(() -> new UpdateResponse());
}
票数 8
EN

Stack Overflow用户

发布于 2019-01-04 15:09:35

这可能是一个通用的解决方案。

代码语言:javascript
复制
//here describe supplier which can throw exceptions

@FunctionalInterface
public interface ThrowingSupplier<T> {
    T get() throws Exception;
}

// The wrapper
private <T> T callMethod(ThrowingSupplier<T> supplier) {
    try {
        return supplier.get();
    } catch (Exception e) {
        //code A
    }finally {
        // code B
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54041246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档