gpt4 book ai didi

kotlin - 用 'is'运算符查找类实例的通用方法

转载 作者:行者123 更新时间:2023-12-02 13:12:45 25 4
gpt4 key购买 nike

我是Kotlin开发的新手,并试图在Kotlin中创建一个使用Exception实例和一个类(例如RuntimeException)的函数来检查该实例是否是特定类的实例。想法是您已捕获到特定类型的异常。然后,您要遍历此异常的原因,直到找到了所要查找的特定异常为止。

        fun findExceptionType(currentException : Throwable?, exceptionToFind: KClass<Throwable>): Throwable? {
var _currentException = currentException
while((_currentException!!.cause == null)!!) {
if (_currentException is exceptionToFind) {
return _currentException.cause
}
_currentException = _currentException.cause
}
return null
}

这个想法是它将继续遍历 exception.cause,直到 exception.cause为null或找到要搜索的异常类型为止。这似乎已经实施了,所以我很惊讶自己必须自己实施。

使用该实用程序功能的原因是避免遍历所有 exception.cause,直到找到所需的特定类型为止。

更加具体:

在Kotlin中,有一个'is'运算符,例如,您可以说 if (s is String),但是在我上面的函数中,我想通过像 if (s is X)这样的东西将其传递给函数来使其通用。 X的类型是什么?目前,我使用了 X,但不确定 KClass运算符的类型签名是什么?

最佳答案

我同意@dyukha。在这里使用reified类型参数非常方便。有了它,您可以像下面这样重写函数:

inline fun <reified T : Throwable> findExceptionType(throwable: Throwable?): T? {
var error = throwable
while (error !is T) {
error = error?.cause
}
return error
}

作为通用的 if (s is X) where X is passed into the function,您可以使用以下代码:
(x as? String)?.let { println(it) }

关于kotlin - 用 'is'运算符查找类实例的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57433074/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com