当我们在 Java 中调用抛出异常的方法时,我们该如何处理呢?
我的代码在 kotlin 中,我使用的是用 java 编写的第 3 方库。我调用了这个库的一个方法,它在某些情况下会抛出很少的自定义异常。现在 kotlin 并没有强制我处理这个异常,在这种情况下应用程序会崩溃。处理此问题的最佳方法是什么?
最佳答案
当 Java 引入检查异常时——编译器强制大多数异常要么被捕获,要么被声明为抛出——这是一个相当新的想法。 Java 是一种比大多数前辈更安全的语言:所有行为在所有平台上定义和一致,许多功能旨在防止崩溃、意外行为或脆弱的编码。所以检查异常非常符合语言的哲学。
但从那以后的几年里,许多人得出结论,检查异常是一个错误。我并不完全相信,但这里有一些原因:
try
的方法很常见。 … catch
block ,和/或声明许多异常。另外,如果在抛出异常和捕获异常之间有 6 个级别的方法调用,则需要通过 5 个方法声明异常。Kotlin 取消了 Java 的大部分样板文件,并且取消了检查的异常符合这一点。
catch
block (尤其是那些除了记录错误什么都不做的危险 block )。 Exception
而不是特定的子类型。 RuntimeException
. Kotlin 的实现非常相似(尽管它使用自己的
KFunction
接口(interface)),并且会遇到同样的问题。对于所有这些问题,很明显,检查异常充其量只是喜忧参半。我可以理解为什么 Kotlin 已经取消了它们。
我确实担心它可能会导致程序不那么健壮(并且文档记录较少)。但是在我使用 Kotlin 的两年中,我还没有看到任何明显的案例。所以我现在暂缓判断:-)
(另见 this 问题。)
至于如何处理您的特殊情况,我建议您像 Kotlin 已检查异常时所做的那样:查看您调用的方法可以抛出哪些异常,找出处理它们的最佳方式/最佳位置,并处理他们!仅仅因为 Kotlin 没有强制你这样做,并不意味着它仍然不是一个好主意!
关于exception - Kotlin 删除检查异常背后的想法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58639126/