Android开发:Kotlin变量初始化方式大揭秘,lateinit、by lazy、delegates.notnull区别全解析!
在 Kotlin 中,变量的初始化有多种方式,包括直接赋值、使用 lateinit 关键字、使用 by lazy 委托以及使用 delegates.notNull 委托。下面我将详细解释这几种初始化方式的区别。 1. 直接赋值:这是最常用的一种初始化方式。在声明变量的时候直接给它赋值。 ```kotlin var name: String = "John" ``` 2. lateinit:如果你有一个非空的类型,并且你想在声明之后,第一次使用之前进行初始化,你可以使用 lateinit 关键字。这个关键字只能在 var 属性上使用,并且只能是可空类型。 ```kotlin var name: String? = null lateinit var name2: String ``` 注意,使用 lateinit 时你不能对变量进行立即初始化,只能在第一次使用时进行初始化。如果尝试在第一次使用之前访问 lateinit 变量,会抛出 UninitializedPropertyAccessException。 3. by lazy:这是一种延迟初始化的方式,只有在第一次访问时才会初始化。这可以避免一些不必要的初始化开销。它只能用于 val 属性,并且只能是可空类型。 ```kotlin val name: String by lazy { "John" } ``` 在第一次访问 name 之前,它不会被初始化。一旦被初始化,它就会保持其值,直到下次重新初始化。 4. delegates.notNull:这是一种委托初始化的方式,它允许你指定一个判断条件来决定变量是否应该被初始化。只有当委托对象返回 null 时,变量才会被初始化。它只能用于 val 属性,并且只能是不可空类型。 ```kotlin val name: String by Delegates.notNull() { "John" } ``` 在这个例子中,如果 name 尚未被初始化,那么它在第一次访问时会被初始化。如果 name 已经被初始化,那么访问不会导致重新初始化。但是如果你试图再次初始化 name,那么它会抛出 InitializationError。 ######[AI写代码神器 | 420点数解答 | 2023-11-09 17:31:15]
- RealtimeMonitoringFragment 代码片段:Android 实时监控功能核心代码剖析(字节豆包 | 30点数解答 | 2024-10-12 10:31:18)298
- 揭秘:Android实时监控片段(RealTimeMonitoringFragment)代码实现(GPT | 531点数解答 | 2024-10-12 10:32:25)275
- Android开发必知:Kotlin内置属性代理delegates.notnull、delegates.observable、delegates.vetoables全解析(百度文心 | 356点数解答 | 2023-11-09 17:31:43)207
- AIDE编写Xposed软件:参考代码教你拦截Smail类方法名(阿里通义 | 649点数解答 | 2024-10-12 00:15:48)310
- Android开发:Kotlin变量初始化方式大揭秘,lateinit、by lazy、delegates.notnull区别全解析!(百度文心 | 420点数解答 | 2023-11-09 17:31:15)211
- 深入解析 Kotlin 中 lateinit:使用场景与注意事项(百度文心 | 224点数解答 | 2023-11-09 17:27:40)280
- Kotlin开发:何时用lateinit而非延迟初始化?这几种情况告诉你! (百度文心 | 253点数解答 | 2023-11-09 17:27:45)237
- C++开发必知:new int[10] 与 new int[10]() 的关键区别 (阿里通义 | 196点数解答 | 2023-11-09 00:45:31)327
- 智能电话窗口按钮1弹起:获取坐标与手机IMEI码待处理(GPT | 208点数解答 | 2024-09-12 16:36:31)356
- Golang开发:解析JSON数据时数值默认类型及示例解析(百度文心 | 393点数解答 | 2023-11-09 18:13:06)284
- SQL Working Areas Sizing: Manual vs. Automatic Policy - A Comprehensive Analysis(阿里通义 | 530点数解答 | 2024-05-13 10:55:58)312
- Typecho 短代码:从 [emoji 图片链接] 到指定 HTML 格式的替换实现 (字节豆包 | 166点数解答 | 2025-01-25 00:26:23)248