• 在Android开发中的特性
      • 代码少,可读性强
      • 可与JAVA进行交互
      • 支持多平台
    • 基本数据类型

      • Kotlin中的说有数据都是以对象的形式存在的,整数类型有四种分别为Byte(1), Short(2), Int(4), Long(8)
      • 定义整型数据时不指定类型且在Int的范围内则默认为Int类,超出最大值则推断为Long。也可以强制指定类型,比如val oneLong = 1L 或 val oneLong: Long = 1
      • 浮点型分为float和double,采用IEEE 754标准,默认为double

        1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21510613/1630911024159-a3a98130-c9bb-40e0-8eca-f114ed8fa869.png#clientId=u2eaa4036-49e7-4&from=paste&height=100&id=u2081d9cc&margin=%5Bobject%20Object%5D&name=image.png&originHeight=124&originWidth=853&originalType=binary&ratio=1&size=7631&status=done&style=none&taskId=u7b0be92c-3291-45ae-becd-c13dfc75268&width=688)
      • Kotlin中没有隐式转换,以下代码可以说明,需要类型转换时必须用函数强制转换,比如val b: Byte = 1 val i1: Int = b.toInt()。很多时候并不需要显示转换,Kotlin存在自动类型推断,如val L=1L+3, L为Long。

    fun main() {
        fun printDouble(d: Double) { print(d) }
    
        val i = 1
        val d = 1.0
        val f = 1.0f
    
        printDouble(d)
    //    printDouble(i) // Error: Type mismatch
    //    printDouble(f) // Error: Type mismatch
    }
    
    • Kotlin不支持8进制。为了可读性可以加下划线,如val oneMillion =1_000_000
      • 运算
    • 位运算: 位运算列表如下

         ![image.png](https://cdn.nlark.com/yuque/0/2021/png/21510613/1630913298395-4485785c-9cb7-4b6f-94ba-8f13ae23df43.png#clientId=u2eaa4036-49e7-4&from=paste&height=220&id=u2d23b7bc&margin=%5Bobject%20Object%5D&name=image.png&originHeight=220&originWidth=205&originalType=binary&ratio=1&size=7912&status=done&style=none&taskId=u012255f4-b33e-4e77-a472-05e0d4aba24&width=205)
      
    • 字符串

      • Kotlin中的字符串类型与JAVA类似也是不可变的,字符串模板用符号$表示,如下代码:

            `val s ="abc" ;  println("$s.length is ${s.length}") ; 结果为 “abc.length is 3”`
        
    • 数组

      • 数组的创建: arrayOf(Element1, Elwment2 , ……); arrayOfNulls(Size); Array(size) {i -> operation}.
      • Kotlin中的数组是invariant的也就是说不可以把Array 转换成 Array
      • 原生类型数组: 原生数组无装箱开销,如ByteArray, ShortArray, IntArray等, 这些class没有继承Array类但是有着同样的方法和属性比如IntArray(), intArrayOf()等
    • Smart Cast

      • 如下代码所示,Kotlin会自动把x映射成String类型

        fun demo(x: Any) {
        if (x is String) {
           print(x.length) // x is automatically cast to String
        }
        }
        
      • 如果在运算符&&或者||的右侧也是可以自动映射的,如下代码所示 ```kotlin if (x !is String || x.length == 0) return

    if (x is String && x.length > 0) { print(x.length) // x is automatically cast to String }

    
       - 在when和while表达式中
    ```kotlin
    when (x) {
        is Int -> print(x + 1)
        is String -> print(x.length + 1)
        is IntArray -> print(x.sum())
    }
    
    • //Todo: 一些不安全情况的总结
      • 控制流
    • if表达式: 在Kotlin中if表达式可以有返回值,所以无需三元预算符,如下代码所示:

      fun largeNumber(n1: Int, n2: Int) = if(n1>=n2) n1 else n2
      
    • when表达式: 匹配值 -> {执行逻辑} 类似于C语言中的switch,示例代码如下:

      when (x) {
      1 -> print("x == 1")
      2 -> print("x == 2")
      else -> { // Note the block
         print("x is neither 1 nor 2")
      }
      }
      
    • 循环:for loops: for (item in collection) {action}; while ; do-while

    • Range : 1..10 [1-10], 1 until 10, 10 downTo 1 step 2 , Range和for结合使用如下所示:
      for (i in 1..3) {
      println(i)
      }
      for (i in 6 downTo 0 step 2) {
      println(i)
      }
      

      ButtonItem shareItem = new ButtonItem("分享", new ButtonItem.OnClickListener() {
                 @Override
                 public void onClick() {
                     onShareClicked();
                 }
             });
             List<ButtonItem> items = new ArrayList<>();
             items.add(shareItem);
             DialogManager dialogManager = new DialogManager(getContext());
             dialogManager.showCommonPopupDialog(null,items,"取消");