Kotlin高阶函数

一. Kotlin相比Java有哪些优点.

(1).kotlin优势

  • 代码简洁,开发效率更高 不用使用findViewById,支减少冗余代码,支持空安全,扩展函数,属性,高阶函数和lambda表达式,内联函数。

  • 内存消耗更少 由于空安全特性和内联函数优化,它能够生成更高效的字节码,从而减少内存的使用。kotlin协程提供了一种轻量级的并发处理方式,可以进一步降低内存的占用。

  • kotlin是未来Android开发主流的语言,一些Android的新特性,新组件都会优先支持kotlin版本。

(2).kotlin劣势 kotlin编译速度相对java较慢,因为她需要进行额外的类型检查(空安全),和代码转换(kotlin-java-java字节码,复杂,耗性能)

备注:Kotlin与Java在运行时性能方面基本相当,由于kotlin支持inline函数,lambda表达式,在某些情况下性能还要由于java.

二 .Kotlin内置的高阶函数run的原理是什么,与let函数有啥区别?

kotlin 复制代码
(1).inline :表示这是一个内联函数,将函数代码直接插入调用处,避免了调用普通方法时,栈帧的创建,销毁所带来的开销。
(2).<T,R> T.run :T代表要为T扩展出一个名为run的函数,R表示lambda表达式最后一行返回的类型。
(3).block:T.()->R:
block:表示lambda的名称
T.():表示输入参数是T本身,让lambda表达式持有了this表示(T)调用者本身
R:表示lambda最后一行返回的类型.
(T) :表示输入参数是T本身,让lambda表达式持有了it表示(T)调用者本身

public inline fun<T,R> T.let(block:(T)->R){
    return block(this)
}

public inline fun<T,R> T.run(block:T.()->R):R{
      return block()
}
//with不是泛型的扩展方法,而是全局方法
public inline fun <T, R> with(receiver: T, block: T.() -> R): R {
    return receiver.block()
}

public inline fun <T> T.also(block: (T) -> Unit): T {
    block(this)
    return this
}
public inline fun <T> T.apply(block: T.() -> Unit): T {
    block()
    return this
}



fun main(){
   var  result1="778".run{  
         true
        length
    }
   println(result1)   //3
  var result2="778".let{
         999
         "$it" //778
  }
}

为啥所有的类型都可以使用run或者let,那是因为高阶函数let和run是对泛型进行扩展,意味着所有类型都等于泛型,所以任何地方都可以使用.run和let的区别在于lambda表达式一个持有this表示调用者本身,一个持有it表示调用者本身。

php 复制代码
public inline <T> T.apply(block:T.()->unit):T
public inline <T> T.also(block:(T)->unit):T
public int <T,R> with(receiver:T,block:T.()->R):R

三 .kotlin语言泛型的形变是什么?【 extends out || super in】

  • 不变:指的是此泛型既可以是消费者,可以是生产者,没有任何继承相关的概念.
csharp 复制代码
class Student<T> {}   
  • 协变 : 指的是此泛型只能是生产者 ,泛型类型只能是T或者T的子类,只能get数据,无法add数据.
csharp 复制代码
ArrayList<out T>            
  • 逆变:指的是此泛型只能是消费者,泛型类型只能是T类型,或者T的父类,只能add数据,无法get【如果get数据,数据类型只能是Object】
r 复制代码
ArrayList<in T>    
相关推荐
北京自在科技7 小时前
谷歌 Find Hub 迎来新版本更新
android·安卓
古法安卓13 小时前
Android-休眠唤醒后onLocationChanged没有数据问题排查
android·java·android studio
Htr_15 小时前
Creem 2.0 使用指南:面向 AI 构建时代的资金平台
android·数据库·人工智能·ui·photoshop
wardenlzr17 小时前
车机看门狗(Watchdog)为何会让整机硬重启
android·优化·车机
IT毕设实战小研17 小时前
基于大数据的商场商铺数据分析与可视化的设计与实现
android·java·大数据·django·课程设计
aqi0018 小时前
一文读懂 HarmonyOS 7.0 带来的十大API重要升级
android·华为·harmonyos·鸿蒙·harmony
是店小二呀18 小时前
鸿蒙PC开源移植:CodeLite原生IDE与Remote Agent适配
android·智能手机·远程桌面
终端安全笔记19 小时前
iOS 27 给了租赁一个新工具,但它只认受监督的设备
android·网络·安全·ios
爱笑鱼20 小时前
Android 系统启动机制(八):系统服务怎样从创建走到可用?SystemServiceManager 和 Boot Phase 各管什么?
android