【问题标题】:scala: How to know the program have unhandled exceptions before running?scala:如何在运行之前知道程序有未处理的异常?
【发布时间】:2017-03-06 07:34:19
【问题描述】:

这是一个测试程序:

object Test {

    def main(args: Array[String]): Unit = {
        // there is an unhandled exception in here, I expect program can remind me, and I can handled it before running.
        myException()  
    }

    def myException: Unit ={
        throw new Exception
    }
}

在Java中,当我调用一个带有未处理异常的方法时,程序会出现错误,并告诉你add throws declarationsurround with try/catch

Scala中运行之前如何知道程序有未处理的异常?

【问题讨论】:

    标签: scala


    【解决方案1】:

    Scala 对Exceptions 的理念有所不同。

    经验法则是不要使用它们,除非用于真正特殊的事情,因此“让它失败”。这条规则背后的原因是,在 FP 术语中,异常破坏了引用透明度。

    好的做法是使用EitherOption 来处理/包装“错误”,而不是抛出异常。 (@Tawkir 提供的链接看起来不错)

    不幸的是,这在与经常使用异常进行程序控制流的 Java 代码交互时无济于事,而且编译器也不会帮助您。解决此问题的一种实用方法是使用Try 包装异常抛出代码,然后调用recoverrecoverWith 来处理这些异常,例如,将它们包装在另一个结构中。

    请注意,您可以使用 @throws 注释标记 scala 方法,以指定此方法抛出的异常,但是在编写旨在由期望要抛出的异常。

    【讨论】:

      【解决方案2】:

      JVM 中已检查和未检查的异常没有区别。这仅在 Java 编译器中强制执行,具体取决于类是否扩展 RuntimeException。 Scala 编译器不检查它,所以无法知道程序是否有未处理的未检查异常。

      【讨论】:

        猜你喜欢
        • 2019-09-14
        • 1970-01-01
        • 2014-05-06
        • 2016-03-06
        • 1970-01-01
        • 1970-01-01
        • 2014-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多