当前位置: 首页 > 知识库问答 >
问题:

异常处理时Java方法引用[重复]

楚元章
2023-03-14

我有一个抛出检查异常的方法:

私有的空testCacheExposion()抛出InterruptedException

我正在尝试创建一个通用包装器,它将优雅地处理异常。

private Runnable handleNonTestException(Runnable r) {
    return () -> {
        try {
            r.run();
        } catch (Exception e) {
            logger.error(NON_TEST_EXCEPTION_MSG, e);
            errors.add(new Error(e.getMessage(), NON_TEST_EXCEPTION_MSG));
        }
    };
}

现在我正在使用handleNonTestException(这::testCacheException),它给我编译时错误未处理的异常类型:InterruptedException。我可能错过了什么?

共有1个答案

龙佐
2023-03-14

我的testCacheExpiration方法签名与runnable接口中的run方法签名不一致(该接口不会引发任何异常)

以下更改解决了此问题:

@FunctionalInterface
private interface ThrowingRunnable <E extends Exception> {
    void run() throws Exception;
}

private Runnable handleNonTestException(ThrowingRunnable<? extends Exception> r) {
    return () -> {
        try {
            r.run();
        } catch (Exception e) {
            logger.error(NON_TEST_EXCEPTION_MSG, e);
            errors.add(new Error(e.getMessage(), NON_TEST_EXCEPTION_MSG));
        }
    };
}`
 类似资料:
  • 我正在和Java8一起做项目,发现了一个我无法理解的情况。 我有这样的代码: 这段代码运行良好,但我可以使用方法引用重写它: 而这段代码没有编译,在方法引用中给出了不兼容的抛出类型*SomeException*。 IDEA还向我提供了错误

  • 我正试图找出处理异常的最具Python风格的方法。假设我们有一个长方法,它可以完成多个注册汽车的任务 例如 检索汽车详细信息 计算税款 发送确认电子邮件 调用方法是否应该处理异常: 或者单个方法本身是否应该处理异常。如果在这个方法中有任何异常,我们只想记录下来(或者在这个例子中打印出来)并继续。 是一种方法比另一种方法更pythonic,还是归结为更具可读性?我更喜欢第二种方式,但我们似乎更频繁地

  • 引入异常处理 尽管只有寥寥几行代码,我们却已经实现了可工作的半协程调度器(缺失异常处理)。 没关系,下面先rollback回return的实现,开始引入异常处理,目标是在嵌套生成器之间正确向上抛出异常,跨生成器捕获异常。 <?php // 为Gen引入throw方法 class Gen { // PHP7 之前 关键词不能用作名字 public function throw_(\

  • 问题内容: 这是我的代码块。 这段代码无法编译,因为我在Line1中添加了“ throws”。 编译器抱怨重写的方法不能引发异常。 为什么这样 ?。 为什么覆盖的方法不能引发异常? 因为我可以通过在子类的实现中添加n行代码来覆盖基类中的方法。 这些添加的代码会引发异常,所以为什么我不能在重写的方法中使用“引发”? 问题答案: 重写的方法可以引发Exception,只要被重写的方法也抛出相同的Exc

  • 主要内容:异常简介,异常类型很多事件并非总是按照人们自己设计意愿顺利发展的,经常出现这样那样的异常情况。例如: 你计划周末郊游,计划从家里出发→到达目的→游泳→烧烤→回家。但天有不测风云,当你准备烧烤时候突然天降大雨,只能终止郊游提前回家。“天降大雨”是一种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案。 计算机程序的编写也需要考虑处理这些异常情况。 异常(exception)是在运行程序时产生的一种异

  • 我期望第1行捕获从第0行抛出的NullPointerException,但它没有发生。 但为什么呢?。 当定义了另一个catch块时,为什么第1行的NPE处理程序不能捕获它? 是因为“投掷”直接进入main()方法吗?