【Kotlin】Android开发Java到Kotlin的过渡
属性初始化
- 在类声明中直接为变量赋值;
- 在初始化块中初始化:
1
2
3
4
5
6
7class LoginFragment : Fragment() {
val index: Int
init {
index = 12
}
} - 延迟初始化:
在 Kotlin 中,必须在==声明对象时==初始化对象的属性,使用lateinit
推迟属性初始化1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class LoginFragment : Fragment() {
private lateinit var usernameEditText: EditText
private lateinit var passwordEditText: EditText
private lateinit var loginButton: Button
private lateinit var statusTextView: TextView
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
usernameEditText = view.findViewById(R.id.username_edit_text)
passwordEditText = view.findViewById(R.id.password_edit_text)
loginButton = view.findViewById(R.id.login_button)
statusTextView = view.findViewById(R.id.status_text_view)
}
...
}
伴生对象
用于定义在概念上与某个类型相关但不与某个特定对象关联的变量或函数。
类似于对变量和方法使用 Java 的 static
关键字。
属性委托
通过属性委托初始化属性,实现在整个应用中的对象复用机制
机制:反射(性能开销大)
1 |
|
在 by
后面的表达式是委托, 属性对应的 get()
与 set()
会被委托给它的 getValue()
与 setValue()
方法
属性的委托不必实现任何的接口,但是需要提供一个 getValue()
方法(对于 var 属性还要提供 setValue()
方法)
Lazy properties
第一次使用到变量时才进行初始化,即进入lazy
块:
1 |
|
observable properties
监听器会收到有关此属性变更的通知:
1 |
|
Kotlin协程
reference: Kotlin Develop.doc
【Kotlin】Android开发Java到Kotlin的过渡
http://example.com/2022/09/20/Android开发Java到Kotlin的过渡-md/