本文最后更新于 197 天前,其中的信息可能已经有所发展或是发生改变。
Android Studio X11 远程开发
TODO
解决中文显示为方块字体/乱码
sudo apt install ttf-wqy-microhei
fc-cache -f -v
Kotlin 语法
警告
此处内容为快速入门参考,可能有不严谨/不准确之处
如果你有JavaScript和Java基础,以及异步、协程、线程的概念,此处应该可以快速通关
声明/定义
Java static 替代
// MyKtClass.kt
class MyKtClass {
companion object {
val foo = "hello"
... //代替 java static
}
}
// 从 Kotlin 调用
val foo = MyKtClass.foo
// 从 Java 调用
var foo = MyKtClass.Companion.getFoo();
var 与 val
var 可变,与 java 一致
val 不可变,等同于 finnal
不需要new
// Java
new Exception("foo")
// Kotlin
Exception("bar")
Coroutine 协程
用法类似 js 的 Promise
suspend fun() { } 等同于 js 的 async function() { }
Continuation<T> 等同于 js 的 Promise<T>
suspend fun helloKt() : String = suspendCoroutine<String> { cont: Continuation<String> ->
cont.resume("hello world")
}
// 简化 平时这么写
suspend fun helloKt() = suspendCoroutine { cont ->
cont.resume("hello world")
}
// 异步运行
launch {
val str = helloKt()
println(str)
}
// 阻塞运行
runBlocking {
val str = helloKt()
println(str)
}
// 阻塞运行 也可以
val str = runBlocking {
helloKt()
}
println(str)
// TODO join async
返回异常
suspend fun helloKt(foo: Boolean) = suspendCoroutine { cont ->
if (foo) {
cont.resumeWithException(Exception("bar"))
}
cont.resume("hello world")
}
空值处理
// 可空变量
var foo : String? = null
// 安全调用
println(foo?.length)
// 非空断言
println(foo!!.length)
// Elvis操作符
println(foo?.length ?? 0)