Kotlin非常用关键字使用记录

1,typealias 声明一个类型别名。

样例:

typealias MyBean=ItemBean
data class ItemBean(val title: String, val intent: Intent)
val bean=MyBean("11", Intent())

实现了将ItemBean数据模型取了一个别名MyBean,后续我们可以像使用别名一样使用他们

2,crossinline 禁止传递给内联函数的 lambda 中的非局部返回。

样例:

private inline fun textCrossInline(crossinline value:()->Unit){
    value()
}

override fun afterInitView() {
    super.afterInitView()
    textCrossInline { 
        return//直接报错,说不能这么返回
    }
}

如果改成下面这样就可以

private inline fun textCrossInline(value:()->Unit){ value() }

3,expect 将一个声明标记为平台相关,并期待在平台模块中实现。

用于实现声明函数或者接口或者抽象类,但是具体实现在具体对应的平台上面

4,infix 允许用中缀表示法调用函数,使函数的调用方式更加简介和个性化

样例:

infix fun String.plusjdz(value:String):String{
    return (this.hashCode()+value.hashCode()).toString()
}
println("a" plusjdz "b")

5,internal 将一个声明标记为在当前模块中可见。

6,noinline 关闭传给内联函数的 lambda 表达式的内联。

和inline关键字不同之处在于,noinline是给lambda表达式的参数标记的,inline标记函数,编译器会默认把所有lambda参数都到对应位置展开,而有的lambda参数不想内联怎么办?
被noinline标记的参数会默认不内联,也就是说把完整的函数调用保留下来;

7,tailrec 将一个函数标记为尾递归(允许编译器将递归替换为迭代)。

它是通过编译器对递归调用做了优化,减少了出现栈溢出风险

tailrec fun sums(a:Int,initValue:Int):Int{
    if (a==0)return initValue
    return sums(a-1,initValue+a)
}

反编译优化后的字节码:

public final int sums(int a, int initValue) {
   while(a != 0) {
      int var10000 = a - 1;
      initValue += a;
      a = var10000;
   }

   return initValue;
}

相关推荐

  1. Kotlin非常关键字使用记录

    2024-03-28 07:12:06       24 阅读
  2. Kotlin中object关键字的使用

    2024-03-28 07:12:06       40 阅读
  3. Kotlin by关键字

    2024-03-28 07:12:06       20 阅读
  4. Kotlin 特色 sealed 关键字

    2024-03-28 07:12:06       9 阅读
  5. vscode 关键字记录

    2024-03-28 07:12:06       15 阅读
  6. Kotlin关键字二——constructor和init

    2024-03-28 07:12:06       44 阅读
  7. Kotlin关键字三——fun与方法

    2024-03-28 07:12:06       13 阅读
  8. Kotlin Lambda使用

    2024-03-28 07:12:06       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-28 07:12:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-28 07:12:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-28 07:12:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-28 07:12:06       20 阅读

热门阅读

  1. kafka安装并测试

    2024-03-28 07:12:06       23 阅读
  2. webpack.dev.js(webpack开发环境配置文件)

    2024-03-28 07:12:06       15 阅读
  3. PDF转Word

    2024-03-28 07:12:06       18 阅读
  4. 加拿大亚马逊无线鼠标IC ID认证ISED认证办理

    2024-03-28 07:12:06       18 阅读
  5. 一些常见的ClickHouse问题和答案

    2024-03-28 07:12:06       18 阅读
  6. vue中使用webrtc streamer linux中

    2024-03-28 07:12:06       21 阅读
  7. tensorflow | no module name tf_slim

    2024-03-28 07:12:06       18 阅读
  8. 什么是软件缺陷(bug)?

    2024-03-28 07:12:06       20 阅读
  9. Should的形式化

    2024-03-28 07:12:06       21 阅读
  10. 为什么ConcurrentHashMap不允许null值?

    2024-03-28 07:12:06       19 阅读
  11. 腾讯云轻量8核16G18M服务器多少钱一年?

    2024-03-28 07:12:06       19 阅读
  12. 机器学习:概念、步骤、分类和实践

    2024-03-28 07:12:06       16 阅读