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结构的替代品,但是它更强大,使用更频繁。
网友评论