Android Kotlin Exception处理
2023-04-18 16:53:27 时间
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()
}
当我们在java代码中使用的时候,如下:
会提醒我们报错,但是如果在 kotlin 文件里使用的时候,就不会有提示。
自定义异常
/**
* @author : zhaoyanjun
* @time : 2021/7/5
* @desc : 自定义异常
*/
class CommonException(code: Int, message: String) : Exception(message)
使用:
@Throws(CommonException::class)
fun createDirectory(file: File) {
if (file.exists())
throw CommonException(0, "file is exists")
file.createNewFile()
}
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
}
}
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")
isSuccess、isFailure
val result = kotlin.runCatching {
sum(2, 4)
}.onSuccess {
Log.d("yy--", "结果正常$it")
}.onFailure {
it.printStackTrace()
Log.d("yy--", "结果异常${it.message}")
}.isFailure
exceptionOrNull
public fun exceptionOrNull(): Throwable? =
when (value) {
is Failure -> value.exception
else -> null
}
如果有异常就返回异常,否则返回 Null
getOrNull
@InlineOnly
public inline fun getOrNull(): T? =
when {
isFailure -> null
else -> value as T
}
如果失败了,就返回null ,否则正常返回
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击