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

有什么简单的方法可以看到Kotlin函数抛出什么异常吗?

符懿轩
2023-03-14

我基本上理解检查异常的潜在问题,以及Kotlin为什么省略它们。然而,我遇到的问题是,我找不到任何简单的方法来清楚地向调用方指示函数可能抛出的异常。

我在Python中遇到过无数次这个问题,我的程序在运行几个月后会崩溃,因为我没有意识到我正在使用的某个库中的一个函数会引发一个特殊的异常。尽管被迫捕获异常可能会有相当大的问题,但清楚地看到函数可能抛出的所有潜在异常还是不错的。

那么回到问题上来,有没有什么简单的方法可以看到函数在Kotlin中抛出什么异常呢?对于用Java写的从Kotlin调用的方法呢?即使只是在工具(intelliJ)中。我并不认为使用javadoc或kdoc编写它,因为您正在使用的函数的编写者可能已经省略了它。

共有2个答案

陶腾
2023-03-14

这个名为Result的库是一个不错的解决方案。它返回一个带有值或异常的结果对象,并相应地将其类型更改为成功或失败。还可以使用库map和flatmap函数将它们链接在一起,这有助于消除嵌套的try-catch块。很酷,我推荐任何发现这个问题的人去看看。

当然,这只对利用它的函数有帮助,所以我不把它标记为答案。

堵恺
2023-03-14

如果您想知道当Kotlin从IntelliJ调用Java方法时抛出什么异常,您可以使用F1键快捷方式拉出javadoc并在弹出菜单中看到抛出声明。

Kotlin函数可以声明它使用@throws注释抛出的异常。注释显然是可选的,所以您很可能不能期望它总是存在。不幸的是,当您在使用@throws的方法上使用F1键盘快捷键时,它不会显示声明要抛出的异常。需要对这些方法进行Java调用来捕获注释中声明的这些异常。

Kotlin javadoc可以使用@throws javadoc注释进一步提供可以在函数中抛出的定义异常。这些确实会出现在javadoc和F1帮助弹出窗口中。当然这也是可选的。

 类似资料:
  • 所以我必须做以下其中之一: 在每个doSomething调用周围添加try catch块 在main中添加throws语句 删除doSomething中的throws语句 将该条件作为前提条件,这样不遵循该条件就会导致未定义的行为或类似的行为。 3将不起作用,因为doSomething可能会在客户端使用时引发异常。1和2简直是多余的,我认为应该避免。 我的问题是:在提到的选项(或任何其他选项)中,

  • 下面是我的代码。当我运行它时,我在线程“main”java.lang.IndexOutOfBoundsException:Index:3、Size:2中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!

  • 我已经用Java编写代码一段时间了。但有时,我不知道什么时候应该抛出异常,什么时候应该捕获异常。我正在做一个有很多方法的项目。层次结构是这样的- 所以目前我正在做的是-我在所有方法中抛出异常并在方法A中捕获它,然后将其记录为错误。 但我不确定这是否是正确的方法?或者我应该开始在所有方法中捕获异常。这就是为什么这种混乱始于我的 - 我什么时候应该抓住异常与何时应该抛出异常。我知道这是一个愚蠢的问题,

  • null 为简洁起见,排除了getter和setter(用于所有字段)以及toString()。 我尽了最大的努力按照指导原则格式化代码,但它没有发生,请耐心等待。 @Entity@Table(name=“Products”)@XmlRootElement@NamedQueries({@NamedQuery(name=“Product.FindAll”,query=“从产品p中选择p”),@nam

  • 为什么重写方法可以在java中抛出未经检查的异常? 为什么重写方法不能抛出比重写方法更广泛的异常?这不是我的问题。我只是想知道为什么重写方法可以抛出未检查的异常,而不能抛出已检查的异常。

  • 我有密码 我想知道抛出怎么会发生这种情况。这显然发生在我的应用程序的一个用户身上,但我无法跟踪出了什么问题。