曹耘豪的博客

Kotlin入门

  1. 与java的不同
  2. 基本类型
  3. 变量定义
  4. 函数定义
  5. 循环
  6. 对象
    1. 类定义
    2. 类的静态变量定义
    3. 接口定义
    4. 数据类定义
    5. 注解定义
  7. 常用数据结构
    1. List
    2. Map
    3. Set

与java的不同

基本类型

与java的类型对比

KotlinJava
ByteByte
IntInteger
LongLong
FloatFloat
DoubleDouble
CharCharacter
StringString
ArrayObject[]

变量定义

1
2
var a = 1 // 可变变量
val a = 1 // 不可变变量,类似于final

函数定义

1
2
3
4
5
6
7
8
9
fun add(a: Int, b: Int): Int {
return a + b
}

val add = { a: Int, b: Int ->
a + b // 隐式return
}

val c = add(1, 2) // 上述两种方式都可以这样调用

循环

1
2
3
4
val list = listOf(1, 2, 3)
for (item in list) {
println(item)
}

对象

类定义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 定义一个空类
class Apple

// 带属性
class Apple (
val name: String
)

// 带注解
@Ann
class Apple (
@Ann val name: String
)

val apple = Apple()

类的静态变量定义

我们也可以直接把变量定义在类外面

1
2
3
4
5
6
7
class Foo{
companion object {
const val BAR = 1
}
}

println(Foo.BAR)

接口定义

1
2
3
4
5
6
7
8
9
10
11
12
13
interface Fruit {
val name: String
fun foo()
}

// 实现
class Apple(
override val name: String = "Apple"
) : Fruit {
override fun foo() {
TODO("Not yet implemented")
}
}

数据类定义

自动生成equalshashCodetoStringcopy等方法

1
2
3
data class Foo (
val bar: Int
)

注解定义

1
2
3
4
5
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.FIELD, AnnotationTarget.CLASS)
annotation class Ann {

}

常用数据结构

List

1
2
3
4
// 不可变
val list = listOf(1, 2, 3)
// 可变
val arrayList = arrayListOf(1, 2, 3)

Map

1
2
3
4
5
6
7
8
9
// 不可变
val map = mapOf(1 to 2, 3 to 4)
// 可变
val hashMap = hashMapOf(1 to 2, 3 to 4)
val linkHashMap = linkedMapOf(1 to 2, 3 to 4)

// map 访问
val v = map[1] // 2
val v = map[0] // null

Set

1
2
3
4
// 不可变
val set = setOf(1, 2, 3)
// 可变
val hashSet = hashSetOf(1, 2, 3)
   /