Kotlin-抛出自定义异常

i7uaboj4  于 2023-08-06  发布在  Kotlin
关注(0)|答案(6)|浏览(122)

如何在Kotlin中抛出自定义异常?我没从医生那里了解到多少...
在文档中,它描述了每个异常需要什么,但我到底如何实现它?

ut6juiuv

ut6juiuv1#

有一点要记住:如果你使用的是IntelliJ IDE,只需简单地复制/粘贴Java代码就可以将其转换为Kotlin。
回到你的问题,现在。如果你想创建一个自定义的Exception,只需要扩展Exception类,比如:

class TestException(message:String): Exception(message)

字符串
然后像这样扔出去

throw TestException("Hey, I am testing it")

mzsu5hc0

mzsu5hc02#

这些答案中的大多数都忽略了Exception有4个构造函数的事实。如果你想在所有正常异常工作的情况下都能使用它,可以:

class CustomException : Exception {
    constructor() : super()
    constructor(message: String) : super(message)
    constructor(message: String, cause: Throwable) : super(message, cause)
    constructor(cause: Throwable) : super(cause)
}

字符串
这将覆盖所有4个构造函数,并沿着传递参数。
编辑:请向下滚动到R. Agnese答案,它设法做到这一点,而不覆盖4个容易出错的构造函数。

4ngedf3f

4ngedf3f3#

我知道这是旧的,但我想详细说明@DownloadPizza的答案:https://stackoverflow.com/a/64818325/9699180
你实际上并不需要四个构造函数。你只需要两个就可以匹配基础Exception类的四个:

class CustomException(message: String? = null, cause: Throwable? = null) : Exception(message, cause) {
    constructor(cause: Throwable) : this(null, cause)
}

字符串
Exception基类来自Java标准库,Java没有默认参数,因此Java类必须为每个可接受的输入组合提供四个构造函数。此外,messagecause在Exception中都被允许是null,所以如果我们试图与Exception 100%兼容,我们的也应该是。
我们甚至需要第二个构造函数的唯一原因是为了避免在Kotlin代码中使用命名参数语法:CustomException(cause = fooThrowable)Exception(fooThrowable)

vc9ivgsu

vc9ivgsu4#

就像这样:

实施

class CustomException(message: String) : Exception(message)

字符串

用法

fun main(args: Array<String>) {
     throw CustomException("Error!")            // >>> Exception in thread "main"
 }                                              // >>> CustomException: Error!

cngwdvgl

cngwdvgl5#

为什么不合并两个答案

假设你想在计算器中抛出一个自定义的Exception。日志记录是可选的,您可以删除init块

class CalculationException constructor(message: String= "ERROR: Invalid Input", cause: Throwable): Exception(message, cause) {
    init {
        Log.e("CalculationException", message, cause)
    }
}

字符串

用法:

没有留言

throw(CalculationException())

输出:默认消息

原因:CalculationException:错误:无效输入

只有消息没有原因

throw(CalculationException("Some Weird Exception"))
enter code here

输出:自定义消息

工艺:PID:23345 java.lang.RuntimeException:无法启动活动ComponentInfo{CalculationException:一些奇怪的例外

信息和原因

throw(CalculationException("Divide ByZero", ArithmeticException()))


2021-08-12 19:36:55.705 17411-17411/ E/计算异常:除零java.lang.ArithmeticException

yftpprvb

yftpprvb6#

最简单/最短的解决方案,如果你不需要别的东西,是这样的

class CustomException : Exception()

字符串

相关问题