kotlin内联函数——runCatching

1.runCatching作用

代替try{}catch{}异常处理,用于捕获异常。

2.runCatching函数介绍

  • 参数:上下文引用对象为参数
  • 返回值:lamda表达式结果

调用runCatching函数,如果调用成功则返回其封装的结果,并可回调onSuccess函数;如果在执行块函数时抛出了任何Throwable异常,则捕获该异常并将其封装为一个失败结果,并回调onFailure函数。例如,

var name: String?= null
name.runCatching {
        Log.d(TAG, "runCatching#${this!!.length}")
   }.onSuccess {
        Log.d(TAG, "runCatching#onSuccess:${it.toString()}")
   }.onFailure { 
        Log.d(TAG, "runCatching#onFailure:${it.message}") 
   }

### Kotlin 内联函数与非内联函数的区别及用法 #### 定义与基本概念 在 Kotlin 中,`inline` 函数是一种优化机制,用于减少因高阶函数调用带来的性能开销。当声明一个 `inline` 函数时,在编译阶段会将其函数体直接嵌入到调用处,而不是像普通函数那样通过栈帧来执行调用[^1]。 相比之下,普通的非内联函数会在运行时动态分配内存并跳转至其定义位置执行逻辑。这种方式虽然简单直观,但在频繁调用或者涉及大量闭包的情况下可能会引入额外的性能损耗。 #### 性能影响 由于内联操作实际上是在编译期展开整个方法实现,因此可以有效避免创建匿名类实例以及相关的对象构造成本。然而这也意味着最终生成的目标字节码体积可能增大,因为每个调用点都会复制一份完整的代码副本。 对于那些只被少量调用或是非常短小精悍的功能模块来说,采用常规形式往往更加合适;而对于需要高度重复利用且计算密集型的任务,则推荐考虑使用 `inline` 关键字修饰的方法以提升效率表现。 #### 使用场景对比分析 以下是两种类型的典型应用场景: - **Inline Functions**: 当涉及到Lambda表达式的传递参数,并希望消除这些lambda所带来的潜在性能问题(如增加堆上新对象的数量),此时应该优先选用带有 `inline` 的版本。 ```kotlin inline fun operation(crossinline action: () -> Unit){ val thread = Thread { try{ action() } finally { println("Finally block executed.") } } thread.start() thread.join() } // Usage Example: operation { println("Performing some task...") } ``` - **Non-Inlined Functions**: 如果某个特定功能不需要特别关注于上述提到的那种细微差别之处——即它既不会显著受益也不会受到损害由inlining引起的变化的话,那么维持现状即可满足需求。 ```kotlin fun simpleOperation(action: () -> Unit){ action() } // Usage Example: simpleOperation{ println("Executing an action.") } ``` 值得注意的是,在某些特殊情况下(例如反射),即使标记为了 `inline`, 实际行为也可能有所不同甚至完全失效。 #### 结论 综上所述,开发者应当根据实际项目中的具体情况权衡利弊后再决定是否应用 `inline` 特性。尽管它可以带来一定的速度改进,但也可能导致程序大小膨胀等问题发生。所以务必谨慎评估每种情况下的取舍关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲暇部落

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值