Kotlin没有错误警告并处理其异常

时间:2019-12-17 14:29:38

标签: android exception kotlin handle

我正在使用一种从API获取JSON数据的方法,在Java中,每当我使用getJSONObject时,都必须用try / catch包围该方法,因为它检测到该方法抛出了{{1 }},我希望能够迫使程序员在使用Kotlin时围绕我的函数。 我要执行此操作的方法如下:

JSONException

但是,当在另一个文件中调用此方法时,不会强制我在try / catch中包围该方法。

有没有办法做到这一点,或者有没有更好的方法来实现这种逻辑?

2 个答案:

答案 0 :(得分:0)

在Kotlin中,没有检查过的异常(Source)。

无需声明任何异常,也不必强迫您捕获任何异常。

要表明可以捕获或必须捕获异常,可以在文档中使用@Throw tag

答案 1 :(得分:0)

Kotlin没有检查过的异常。 <table class="table_1"> <tbody> <tr> <td><span class="num">1</span></td> <td><span class="cc">Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal m</span></td> </tr> <tr> <td><span class="num">2</span></td> <td><span class="cc">Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal mLorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal m</span></td> </tr> <tr> <td><span class="num">3</span></td> <td><span class="cc">Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal m</span></td> </tr> <tr> <td><span class="num">4</span></td> <td><span class="cc">Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal m</span></td> </tr> <tr> <td><span class="num">5</span></td> <td><span class="">Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal m</span></td> </tr> </tbody> </table> <p></p>仅强制Java代码检查异常,而对Kotlin代码没有影响。

一种选择是使用密封类,该类可以返回期望的结果或错误。

@Throws
sealed class HitEventsResult {
    data class Success(val value: List<AlgoliaEvent>): HitEventsResult()
    data class Failure(val exception: JSONException): HitEventsResult()
}

然后在呼叫站点:

fun parseHitEvents(jsonObject: JSONObject): HitEventsResult  {
    try {
        // your original code for getting the results...
        return HitEventsResult.Success(results)
    } catch (e: JSONException){
        return HitEventsResult.Failure(e)
    }
}

或者如果您想重新投掷:

val hitEventsResult = parseHitEvents(jsonObject)
when (hitEventsResult){
    is Success -> TODO() // do something with result.value
    is Failure -> TODO()
}