java - 为什么我不需要在这里用 try、catch 包装已检查的异常?

标签 java exception lambda

我在下面的代码中使用了 lambda 表达式,但即使该方法抛出已检查的异常,Eclipse 也不要求我用 try、catch block 包装调用。为什么?

package lambda;

//Throw an exception from a lambda expression. 

interface DoubleNumericArrayFunc {
    double func(double[] n) throws EmptyArrayException;
}

class EmptyArrayException extends Exception { // Checked exception
}

public class LambdaExceptionDemo {

    public static void main(String args[]) throws EmptyArrayException {

        DoubleNumericArrayFunc average = (n) -> {
            if (true)
                throw new EmptyArrayException();
            return 1;
        };


        // Why try catch isn't required here?
        System.out.println("The average is " + average.func(new double[0]));
    }

}

最佳答案

public static void main(String args[]) throws EmptyArrayException {

因为 main() 上有一个 throws 子句。允许传播异常,因此不需要捕获它。删除抛出,您将需要添加一个try/catch。

关于java - 为什么我不需要在这里用 try、catch 包装已检查的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41599258/

相关文章:

c++ - 命名空间 std 中没有名为 'function' 的类型

java - 如何将 BufferedImage 转换为 8 位?

java - 如何用java获取网页的源代码?(如何处理延迟加载?)

c++ - 为什么我不能使用 if 语句而不是在 C++ 中使用 assert?

Haskell - 这个素性测试中的 lambda 是什么意思以及它是如何工作的?

json - 解析从 iOS swift 3 中的 lambda 返回的 AWSTask 响应

java - 与帧速率无关的正弦波模式

java - 使用 GeckoDriver 运行 Java Selenium WebDriver 时 Firefox 无法连接

c# - 使用套接字获取对象处置异常

mysql - 专门处理 MySQL 连接的全局异常