美文网首页
3.Any与when关键字详解

3.Any与when关键字详解

作者: leofight | 来源:发表于2017-12-18 22:58 被阅读0次

    1.关键字Any

    • 示例代码
    fun main(args: Array<String>) {
        println(convert2Uppercase("hello world"))
        println(convert2Uppercase(23))
    }
    
    
    fun convert2Uppercase(str: Any): String? {
    
        if (str is String) {
            return str.toUpperCase()
        }
    
        return null
    }
    
    • 运行结果
    HELLO WORLD
    null
    

    Any,和Object作为Java类层级结构的根差不多,Any类型是Kotlin所有非空类型的超类型(非空类型的根)。但是在Java中,Object只是所有引用类型的超类型(引用类型的根),而基本数据类型并不是类层次结构的一部分。这意味着当你需要Object的时候,不得不使像java.lang.Integer这样的包装类型来表示基本数据类型的值。而在Kotlin中,Any是所有类型的超类型(所有类型的根),包括像Int这样的基本数据类型。

    和Java一样,把基本数据类型的值赋给Any类型的变量时会自动装箱;
    val a : Any = 42
    Any是引用类型,所有值42会被装箱。

    注意:Any是非空类型,所有Any类型的变量不可以持有null值。在Kotlin中如果需要可以持有任何可能值的变量,包括null在内,必须使用Any?类型。

    2.数组

    • 示例代码
    
    fun main(args: Array<String>) {
        var array: IntArray = intArrayOf(1, 2, 3, 4, 5)
    
        for (item: Int in array) {
            println(item)
        }
    
        println("----------")
    
        for (i: Int in array.indices) {
            println("array[$i] = ${array[i]}")
        }
    
        println("-----------")
    
        for ((index, value) in array.withIndex()) {
            println("array[$index] = $value")
        }
    }
    
    • 运行结果
    1
    2
    3
    4
    5
    ----------
    array[0] = 1
    array[1] = 2
    array[2] = 3
    array[3] = 4
    array[4] = 5
    -----------
    array[0] = 1
    array[1] = 2
    array[2] = 3
    array[3] = 4
    array[4] = 5
    

    Kotlin中的数组是一个带有类型参数的类,其元素类型被指定为相应的类型参数。
    在Kotlin中创建数组
    a. arrayOf函数创建一个数组,它包含的元素是指定为该函数的实参。
    b.arrayOfNulls创建一个给定大小的数组,包含的是null元素。当然,它只能用来创建包含元素类型可空的数组。
    和其他类型一样,数组类型的类型参数始终会变成对象类型。因此,如果声明一个Array<Int>,它将会是一个包含装箱整型的数组(它的Java类型将是java.lang.Integer[]).如果需要创建没有装箱的基本数据类型的数组,必须使用一个基本数据类型数组的特殊类。
    为了表示基本数据类型的数组,Kotlin提供了若干独立的类,每一种基本数据类型都对应一个。例如:Int类型值的数组叫做IntArray。Kotlin还提供了ByteArray,CharArray,BooleanArray等给其他类型。

    3.when语法

    • 示例代码
    
    fun main(args: Array<String>) {
        println(myPrint("hello"))
        println(myPrint("world"))
        println(myPrint("test"))
    
        println("------------")
    
        var a = 6
    
        var result = when (a) {
            1 -> {
                println("a = 1")
                10
            }
            2 -> {
                println("a = 2")
                20
            }
            3, 4, 5 -> {
                println("a = 3 or 4 or 5")
                30
            }
            in 6..10 -> {
                println("a in between 6 and 10")
                40
            }
            else -> {
                println("a is other value")
                50
            }
        }
    
        println(result)
    }
    
    fun myPrint(str: String): String {
        return when (str) {
            "hello" -> "HELLO"
            "world" -> "WORLD"
            "helo world" -> "HELLO WORLD"
            else -> "other input"
        }
    }
    
    fun myPrint2(str: String): String =
            when (str) {
                "hello" -> "HELLO"
                "world" -> "WORLD"
                "helo world" -> "HELLO WORLD"
                else -> "other input"
            }
    
    
    • 运行结果
    HELLO
    WORLD
    other input
    ------------
    a in between 6 and 10
    40
    
    

    when结构,可以被认为是Java中的switch结构的替代品,但是它更强大,使用更频繁。

    相关文章

      网友评论

          本文标题:3.Any与when关键字详解

          本文链接:https://www.haomeiwen.com/subject/curvwxtx.html