笔记内容来自 扔物线 的 https://kaixue.io/kotlin-basic-1/
项目中添加 Kotlin 支持
1、如果是新项目,需要在新建立项目的时候直接选择 kotlin 编程语言即可
- File -> New -> New Project …
- Choose your project -> Phone and Tablet -> Empty Activity
- Configure your project -> Language 选择 「Kotlin」
2、如果添加到现有项目,需要添加:
项目根目录下的 ‘build.gradle’ 下:
?
ext.kotlin_version = '1.3.41'
repositories {
...
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0-beta05'
?
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
app 目录下的 ‘build.gradle’ 下:
?
apply plugin: 'kotlin-android'
...
android {
...
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
?
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
...
}
变量的声明
var v: View
跟 java 的不同:
- 有一个 var(variable)/val(value) 关键字
- 类型和变量名位置互换了
- 中间是用冒号分隔的
- 结尾没有分号
空安全设计
通过 IDE 的提示来避免调用 null 对象,从而避免 NullPointerException。
一些操作符:
操作符 | 含义 | 例子 |
---|---|---|
? | 解除空限制,即对象可以为空 | var view: View? = null |
?. | 做一次非空确认之后再调用方法,并且线程安全 | view?.setBackgroundColor(Color.RED) |
!! | 断言式,编译器不帮助检查,也就不符合空安全设计 | var view: View? = null |
延迟初始化
采用 lateinit
关键字。
它的作用就是让 IDE 不要对这个变量检查初始化和报错。换句话说,加了这个 lateinit
关键字,这个变量的初始化就全靠你自己了,编译器不帮你检查了
函数
fun cook(name: String): Food {
...
}
- 以
fun
关键字开头 - 返回值写在了函数和参数后面
- 如果无返回值,返回值类型可省略
- 函数参数也有可空控制
get()/set()
方法
默认已实现 get 、set 方法,如果要完成 ”钩子“效果,自己在变量下方写 get、set方法(注意 field 的概念)
类型
条件满足如下之一就不装箱:
- 不可空类型。
- 使用 IntArray、FloatArray 等
类和对象
关键字/操作符 | 含义 |
---|---|
public | 可省略,默认 public |
: | 继承和实现 |
override | override 函数的可见性是继承自父类 |
final | 类默认是 final 的,不可继承 |
open | 解除 final 限制,可以继承。没有父类到子类的遗传性 |
类型的判断和强转
关键字/操作符 | 含义 |
---|---|
is | 先进行类型判断,可以省略强转的写法 |
as | 不进行类型判断,直接进行强转调用。强转不成功就会抛类型转换异常 |
as? | 不进行类型判断,直接进行强转调用。强转不成功就不执行 |