3.Any与when关键字详解

1.关键字Any

  • 示例代码
fun main(args: Array) {
    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) {
    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,它将会是一个包含装箱整型的数组(它的Java类型将是java.lang.Integer[]).如果需要创建没有装箱的基本数据类型的数组,必须使用一个基本数据类型数组的特殊类。
为了表示基本数据类型的数组,Kotlin提供了若干独立的类,每一种基本数据类型都对应一个。例如:Int类型值的数组叫做IntArray。Kotlin还提供了ByteArray,CharArray,BooleanArray等给其他类型。

3.when语法

  • 示例代码

fun main(args: Array) {
    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关键字详解)