kotlin 基础知识
介绍
基础语法(一)
1 | fun getGreeting(): String { |
for 循环
1 | fun testFor(){ |
while 循环
1 | fun testWhile(){ |
When 表达式 (java的switch)
1 | fun testWhen( a : Int){ |
使用区间(range)
1 | fun testRange(){ |
Maps 遍历
1 | fun testMap(){ |
空安全
1 | /** |
Elvis 操作符
1 | val l: Int = if (b != null) b.length else -1 |
####高阶函数与 lambda 表达式
基本类型
1 | Type Bit width |
###函数
1 | 函数的声明: |
嵌套函数
Kotlin 的函数有一些非常有意思的特性,比如函数中再声明函数。
与内部类有些类似,内部函数可以直接访问外部函数的局部变量、常量,而外部函数同级的其他函数不能访问到内部函数。这种写法通常使用在 会在某些条件下触发递归的方法内或者是不希望外部其他函数访问到的函数,在一般情况下是不推荐使用嵌套函数的
1 | fun function() { |
类
构造函数
Kotlin 的构造函数可以写在类头中,跟在类名后面,如果有注解还需要加上关键字constructor。这种写法声明的构造函数,我们称之为主构造函数。例如下面我们为Person创建带一个String类型参数的构造函数。在构造函数中声明的参数,它们默认属于类的公有字段,可以直接使用,如果你不希望别的类访问到这个变量,可以用private修饰。
在主构造函数中不能有任何代码实现,如果有额外的代码需要在构造方法中执行,你需要放到init代码块中执行。同时,在本示例中由于需要更改 name 参数的值,我们将 val 改为 var,表明 name 参数是一个可改变的参数。
1 | open class Person (private var name : String){ |
次级构造函数
一个类当然会有多个构造函数的可能,只有主构造函数可以写在类头中,其他的次级构造函数(Secondary Constructors)就需要写在类体中了。次级构造函数调用了主构造函数,完成 name 的赋值。由于次级构造函数不能直接将参数转换为字段,所以需要手动声明一个 description 字段,并为 description 字段赋值。
修饰符
1 | open 修饰符 |
枚举类
Kotlin 与 Java 混编
Java 转换为 Kotlin
Intellij IDEA 会帮你一键转换,将 Java 代码转换成 Kotlin 代码(但是反过来就不行了)。在 Mac 上,系统默认的快捷键为control+shift+command+K,快捷键可以通过你的编译器 keymap 中修改:command+, -> 搜索keymap -> 右侧搜索kotlin,可以查看到Convert Java File to Kotlin File项。
在 Kotlin 中调用 Java 代码
1 | fun invokeJava(source: List<Int>){ |
返回 void 的方法
如果一个 Java 方法返回 void,那么从 Kotlin 调用时中返回 Unit。 万一有人使用其返回值,它将由 Kotlin 编译器在调用处赋值, 因为该值本身是预先知道的(是 Unit)
#####将 Kotlin 中是关键字的 Java 标识符进行转义
一些 Kotlin 关键字在 Java 中是有效标识符:in、 object、 is 等等。 如果一个 Java 库使用了 Kotlin 关键字作为方法,你仍然可以通过反引号(`)字符转义它来调用该方法:
1 | // Java 代码中有个方法叫 is() |
static 方法
在 Kotlin 中没有 static关键字,那么如果在 Java 代码中想要通过类名调用一个 Kotlin 类的方法,你需要给这个方法加入@JvmStatic注解(这个注解只在 jvm 平台有用)
companion object表示外部类的一个伴生对象,你可以把他理解为外部类自动创建了一个对象作为自己的field
1 | 写法一 |
Java 中调用 Kotlin
####委托