在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。 [2023-11-09 17:31:15 | AI写代码神器 | 420点数解答]
- package com.example.weather; import android.content.context; import android.media.mediaplayer; import android.net.uri; import android.os.bundle; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.webkit.websettings; import android.webkit.webview; import android.webkit.webviewclient; import android.widget.videoview; import androidx.fragment.app.fragment; public class realtimemonitoringfragment extends fragment {(30点数解答 | 2024-10-12 10:31:18)226
- package com.example.weather; import android.content.context; import android.media.mediaplayer; import android.net.uri; import android.os.bundle; import android.util.log; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.webkit.websettings; import android.webkit.webview; import android.webkit.webviewclient; import android.widget.videoview; import androidx.fragment.app.fragment; public class realtimemonitoringfragment extends fragment {(531点数解答 | 2024-10-12 10:32:25)206
- 在android开发中,简述kotlin内置的属性代理:delegates.notnull、delegates.observable、delegates.vetoables ?(356点数解答 | 2023-11-09 17:31:43)165
- 如何用aide编写的xposed软件拦截一个smail类里面的方法名,请参考如下代码进行修改达到效果 import android.content.*; import android.graphics.*; import android.os.*; import android.widget.*; import de.robv.android.xposed.*; import de.robv.android.xposed.callbacks.*; import java.util.*; import android.app.*; /* 注意:该类不要自己写构造方法,否者可能会hook不成功 * 开发xposed模块完成以后,关闭bebug以提升性能 * debug模式只需要第一次重启,以后修改hook代码就不用重启了 */ public class xposed implements ixposedhookloadpackage { public static activity 上下文; @override public void handleloadpackage(x(649点数解答 | 2024-10-12 00:15:48)215
- 在android开发中,阐述kotlin中变量初始化有几种?其中lateinit、by lazy、delegates.notnull有什么区别 ?(420点数解答 | 2023-11-09 17:31:15)164
- 在android开发中,kotlin 中的 lateinit 是什么,你会在什么时候使用它?(224点数解答 | 2023-11-09 17:27:40)233
- 在android开发中,阐述什么时候在 kotlin 中使用 lateinit 而不是延迟初始化?(253点数解答 | 2023-11-09 17:27:45)188
- ``` $pattern = '/\[buttondown title:(.*?) href:(.*?)\]/'; $replacement = '<a class="tag-plugin colorful button" color="theme" title="$1" href="$2"><i class="fas fa-download" /></i><span>$1</span> </a>'; $content = preg_replace($pattern, $replacement, $content); ``` 帮我参考上面typecho的短代码写法,把下面的短代码改成下面的html: 短代码写法: ``` [emoji 表情图片链接] ``` 替换成如下html: ``` <span class="tag-plugin emoji"><img class="inline lazy" data-src="表情图片链接" onerror="javascript:this.classList.add('error');this.src='https://gco(166点数解答 | 2025-01-25 00:26:23)197
- .method public 按钮1$被弹起(ii)v .locals 4 .param p1, "\u6a2a\u5750\u6807" # i .param p2, "\u7eb5\u5750\u6807" # i .prologue .line 20 new-instance v0, ljava/lang/stringbuilder; invoke-direct {v0}, ljava/lang/stringbuilder;-><init>()v iget-object v1, p0, lcom/chuchenqi/窗口29;->手机1:lcom/e4a/runtime/components/impl/android/n9/手机; invoke-interface {v1}, lcom/e4a/runtime/components/impl/android/n9/手机;->取imei码()ljava/lang/string; move-result-object v1(208点数解答 | 2024-09-12 16:36:31)264
- 1.创建一个普通用户*user(其中*为学生姓名拼音首字母组合)。 2.修改用户的uid。 3.修改用户的密码和有效期等信息。 4.创建系统用户*system(其中*为学生姓名拼音首字母组合)。 5.查看用户配置文件/etc/passwd和/etc/shadow,观察内容变化情况,可以在命令行中执行文件显示命令,也可以使用grep命令来查找。 创建和管理组账户 1.创建一个新的组*group (其中*为学生姓名拼音首字母组合)。 2.修改组账户名称和gid。 3.查看用户所属组。 4.将用户添加到新建组中。 5.将用户从该新建组中删除。 6.查看组配置文件/etc/group和/etc/gshadow获取组账户信息列表,观察变化情况并做简要说明。(530点数解答 | 2024-11-11 13:43:39)606
- 编写代码,定义 fnum 变量,值为 5.618×107。(8点数解答 | 2024-05-20 22:29:10)206
- 编写代码,定义 fnum 变量,值为 5.618×107。(85点数解答 | 2024-05-20 22:30:33)212