当前位置:   article > 正文

Android Kotlin Exception处理

Android Kotlin Exception处理

Throws Exception
Kotlin 的异常和 Java 的一样, try…catch…finally代码块处理异常,唯一一点不同是:Kotlin 的异常都是 Unchecked exceptions。

checked exceptions 是必须在方法上定义并且处理的异常,比如 Java 的 IoException。

Kotlin 抛出异常是使用 Throws 注解来实现的,如下:

@Throws(IOException::class)
fun createDirectory(file: File) {
    if (file.exists())
        throw IOException("Directory already exists")
    file.createNewFile()
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

当我们在java代码中使用的时候,如下:

会提醒我们报错,但是如果在 kotlin 文件里使用的时候,就不会有提示。

自定义异常

/**
 * @author : zhaoyanjun
 * @time : 2021/7/5
 * @desc : 自定义异常
 */
class CommonException(code: Int, message: String) : Exception(message)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用:

@Throws(CommonException::class)
fun createDirectory(file: File) {
    if (file.exists())
        throw CommonException(0, "file is exists")
    file.createNewFile()
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
runCatching
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        kotlin.runCatching {
            sum(2, 4)
        }.onSuccess {
            Log.d("yy--", "结果正常$it")
        }.onFailure {
            it.printStackTrace()
            Log.d("yy--", "结果异常${it.message}")
        }

    }

    fun sum(num1: Int, num2: Int): Int {
        1 / 0
        return num1 + num2
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
getOrDefault
val result = kotlin.runCatching {
            sum(2, 4)
        }.onSuccess {
            Log.d("yy--", "结果正常$it")
        }.onFailure {
            it.printStackTrace()
            Log.d("yy--", "结果异常${it.message}")
        }.getOrDefault(100)

//如果运行正常,就返回6,运行异常就返回100
Log.d("yy--", "结果$result")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
isSuccess、isFailure
val result = kotlin.runCatching {
            sum(2, 4)
        }.onSuccess {
            Log.d("yy--", "结果正常$it")
        }.onFailure {
            it.printStackTrace()
            Log.d("yy--", "结果异常${it.message}")
        }.isFailure
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
exceptionOrNull
    public fun exceptionOrNull(): Throwable? =
        when (value) {
            is Failure -> value.exception
            else -> null
        }
  • 1
  • 2
  • 3
  • 4
  • 5

如果有异常就返回异常,否则返回 Null

getOrNull
    @InlineOnly
    public inline fun getOrNull(): T? =
        when {
            isFailure -> null
            else -> value as T
        }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

如果失败了,就返回null ,否则正常返回

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/245392
推荐阅读
相关标签
  

闽ICP备14008679号