作家
登录

不要用Java的语法思维来写Kotlin

作者: 来源: 2018-03-12 11:57:41 阅读 我要评论

Kotlin智能转换(Smart Casts)

对于弗成变的值,Kotlin一般不须要显式转换对象类型,编译器能跟踪is检查类型,在须要时会主动插仁攀类型转换代码(安然):

  1. fun classCast(a: Any) { 
  2.     if (a is String) { 
  3.         print(a.length) //编译器主动把a转换为String类型 
  4.     } 

Kotlin编译器很聪慧,能辨认反向检查类型!is操作符,会主动插仁攀类型转换代码:

  1. if (a !is String) return 
  2.     print(a.length) //编译器主动把x转换为String类型: 
  3.     // ||右侧, a主动转换为String类型 
  4.     if (a !is String || a.length == 0) return 
  5.     // &&右侧, a主动转换为String类型 
  6.     if (a is String && a.length > 0) { 
  7.         print(a.length) // a 主动转换为字符串 
  8.     } 
  9.     //智能转换(smart casts)也用于when表达式和while轮回 
  10.     when (a) { 
  11.         is Int -> print(a + 1) 
  12.         is String -> print(a.length + 1) 
  13.         is IntArray -> print(a.sum()) 
  14.     } 

如不雅不克不及包管变量在类型检查is/!is操作符和变量应用之间弗成改变时,智能转换不克不及用。智能转换的实用前提或规矩:

  1. val局部变量-老是实用!
  2. val属性-实用于private或internal,或者类型检查is/!is在声明属性的同一模块中履行;
  3. 不实用于open的属性,或者具有自定义getter的属性!
  4. var局部变量—实用于变量在类型检查和应用之间没有修改,且不在修改它的lambda中捕获!
  5. var属性-不实用(因为该变量可随时被修改)

安然(可空)转换-操作符as?

为避免抛出异常,可用安然转换操作符as?,在掉败时返回null

  1. val a: String? = b as? String 

尽管as?右边是一个非空类型String,然则as?转换掉败时返回可空(null),换句话说就是,as?函数参数String不克不及为null,然则as?函数的返回值可所以null

此用法在数据类型章节中的数组类型顶用到过。还不甚清跋扈的可以查看 Kotlin——最具体的数据类型介绍。

8.真的要习惯Koltin的for轮回,太强大年夜了

Kotlin没有Java中的for(初始值;前提;增减步长)这个规矩。然则Kotlin中对于for轮回语句新增了其他的规矩,来知足刚提到的规矩。

  1. for轮回供给迭代器用来遍历任何器械
  2. for轮回数组被编译为一个基于索引的轮回,它不会创建一个迭代器对象

新增的规矩,去知足for(初始值;前提;增减步长)这个规矩

递增

关键字:until

例:

  1. // 轮回5次,且步长为1的递增 
  2. for (i in 0 until 5){ 
  3.   print("i => $i \t"

输出结不雅为

  1. i => 0 i => 1 i => 2 i => 3 i => 4 

      推荐阅读

      热管还会打酱油?别让散热误区帮你倒忙

    沙龙晃荡 | 3月31日 京东、微博拭魅战专家与你合营商量容器技巧实践! 在很多行业中都有很多看起来竽暌剐事理,用起往来交往不是那回事的误区,在主机中更是有不少,受愚钱是一方面,硬件和>>>详细阅读


    本文标题:不要用Java的语法思维来写Kotlin

    地址:http://www.17bianji.com/lsqh/40601.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)