Kotlin之lateinit 和 lazy 区别

news/2024/9/23 3:16:07/

目录


在 Kotlin 中,lateinitlazy 都用于延迟初始化变量,但它们有不同的应用场景和使用方式。

lateinit_3">lateinit

  • 适用类型:只能用于 var 变量,且类型必须是非空类型(不能是基本类型,如 Int、Double 等)。
  • 用法:在声明变量时使用 lateinit 关键字,表示该变量将在稍后初始化
  • 初始化时机:可以在任何时候进行初始化,通常在类的构造函数或其他方法中进行。
  • 检查是否初始化:可以使用 ::variableName.isInitialized 来检查变量是否已经初始化

class Example {lateinit var name: Stringfun initializeName() {name = "Kotlin"}fun printName() {if (::name.isInitialized) {println(name)} else {println("Name is not initialized")}}
}

lazy_29">lazy

  • 适用类型:只能用于 val 变量。
  • 用法:在声明变量时使用 lazy 函数,传入一个 lambda 表达式来提供变量的初始化代码。
  • 初始化时机:在第一次访问变量时进行初始化,且初始化过程是线程安全的。
  • 缓存结果:初始化后,lazy 会缓存结果,后续访问直接返回缓存值。
class Example {val name: String by lazy {println("Initializing name")"Kotlin"}fun printName() {println(name)}
}

区别总结

适用范围:

lateinit:只能用于 var 变量,且类型必须是非空类型。
lazy:只能用于 val 变量。

初始化时机:

线程安全:

  • lateinit:不保证线程安全。
  • lazy:默认是线程安全的。

检查是否初始化

缓存结果:

  • lateinit:不缓存结果,每次访问都使用当前值。
  • lazy初始化后缓存结果,后续访问直接返回缓存值。

使用场景

  • lateinit:适用于需要稍后初始化的可变变量,且类型是非空类型。例如,在依赖注入框架中使用 lateinit 来延迟初始化依赖。
  • lazy:适用于只读变量,且初始化过程可能比较耗时,需要在第一次访问时延迟初始化。例如,延迟加载配置文件或计算结果。

http://www.ppmy.cn/news/1511150.html

相关文章

【机械原理学习】——《机械原理》(第二版)机构部分

机械原理 绪论: 机械机器机构 第一章:平面机构的结构分析 构件与零件 每个独立运动的单元体称为构件机构总是由一些零件组成的‌过盈配合是指两个配合零件之间存在一定的过盈量,即一个零件的孔径比另一个零件的轴径小,装配时…

最常用的正则表达式规则和语法

正则表达式(Regular Expression,简称 regex)是一种用于匹配字符串的强大工具。它使用特定的语法规则来定义字符串模式,可以用来搜索、替换、验证字符串等。以下是一些常用的正则表达式规则和语法: 1. 基本字符匹配 . :匹配任意单个字符(除了换行符)。 示例:a.c 可以匹…

SQL每日一练-0814

今日SQL题难度:🌟☆☆☆☆☆☆☆☆☆ 1、题目要求 找出每个部门中薪资最高的员工显示部门ID、部门名称、员工ID、员工姓名以及对应的薪资 2、表和虚拟数据 现有两个表:Employees 和 Departments,记录了员工和部门信息。…

谷歌的高级指令有哪些

今天会分享一些组合用法,这样就能节省许多时间可以放在跟进客户上面(本文只介绍谷歌的搜索指令,并无推广) part one 谷歌常用的搜索引擎指令: 1、Inurl,在网址中 2、Intext,在网页内容中 3、…

Spring boot + mybatis plus 多数据源

有参照链接:SpringBoot配置多数据源的一款框架(dynamic-datasource-spring-boot-starter) - 编程宝库 场景:A公司为总公司,B公司为分公司,B公司上传的数据需要保存到A公司中。 application.yml的配置 spring:datasource:dynami…

Elasticsearch 实现距离查询、排序和筛选

Elasticsearch 实现距离查询、排序和筛选 前言 在现代应用中,位置相关的查询需求越来越普遍。无论是查找附近的餐厅、计算两个地点之间的距离,还是根据用户位置进行排序和筛选,Elasticsearch 都提供了强大的地理位置查询功能。本文将介绍如…

Ruby GUI宝典:探索顶级图形界面库

标题:Ruby GUI宝典:探索顶级图形界面库 Ruby,这门以优雅和简洁著称的语言,不仅在服务器端编程中大放异彩,其在图形用户界面(GUI)开发上同样拥有不可忽视的地位。本文将带领大家深入了解Ruby的G…

vue2中使用i18n配置elementUi切换语言

1、下载插件 npm i vue-i18n8.22.2 2、新建文件夹i18n 3、编写index.js文件 import Vue from "vue"; import VueI18n from "vue-i18n"; import locale from element-ui/lib/locale; // 引入 elementui 的多语言 import enLocale from element-ui/lib/l…