Kotlin apply和with用法和区别
apply
apply 是 Kotlin 标准库中的一个函数,它允许你在对象上执行一系列操作,然后返回该对象自身。它的语法结构如下:
fun <T> T.apply(block: T.() -> Unit): T
这个函数接受一个 lambda 表达式作为参数,该 lambda 表达式被应用于调用 apply 的对象,并可以在 lambda 中对对象进行任何操作。
-
对象初始化和配置:apply 通常用于初始化一个对象并对其进行属性设置。例如:
val person = Person().apply {name = "Alice"age = 25// 其他属性设置} -
对象转换和修改:apply 还可以用于对现有对象进行修改或转换
val modifiedPerson = person.apply {age += 5// 其他属性修改}
上面的示例中,我们使用 apply 函数修改了现有的 person 对象的属性。这在需要对对象进行一系列修改时非常有用。总的来说,apply 函数提供了一个简洁而强大的方式来初始化和配置对象,使代码更易读、更具可维护性。
with
它的语法结构如下:
fun <T, R> with(receiver: T, block: T.() -> R): R
这个函数接受两个参数:第一个是对象 receiver,第二个是 lambda 表达式 block。在 with 函数的作用域内,我们可以直接访问 receiver 对象中的属性和方法。
data class Person(var name: String, var age: Int)val person = Person("Alice", 25)
val result = with(person) {name = "Bob"age = 30"$name is $age years old."
}
println(person) // 输出:Person(name=Bob, age=30)
println(result) // 输出:Bob is 30 years old.
在上面的示例中,我们创建了一个 Person 对象,并使用 with 函数来对其进行属性设置和操作。在 with 的 lambda 表达式中,我们修改了对象的 name 和 age 属性。最后,将返回一个字符串,其中包含修改后的 name 和 age 属性值。
区别
with 函数和 apply 函数在 Kotlin 中都用于在特定上下文中执行代码块,但它们有一些区别。
-
作用对象:
with 函数的第一个参数是一个对象,并且该对象将成为 lambda 表达式内部的上下文对象。在 lambda 内部,可以直接访问该对象的属性和方法。
apply 函数的作用对象是调用 apply 函数的对象本身。在 lambda 内部,可以直接访问调用 apply 的对象的属性和方法。 -
返回值:
with 函数的返回值是 lambda 表达式的结果。
apply 函数的返回值是调用 apply 的对象本身。
相关文章:
Kotlin apply和with用法和区别
apply apply 是 Kotlin 标准库中的一个函数,它允许你在对象上执行一系列操作,然后返回该对象自身。它的语法结构如下: fun <T> T.apply(block: T.() -> Unit): T这个函数接受一个 lambda 表达式作为参数,该 lambda 表达…...
springboot通过aop自定义注解@Log实现日志打印
springboot通过aop自定义注解Log实现日志打印 文章目录 效果图实操步骤1.引入依赖2.自定义日志注解3.编写日志切面类4.UserController5.运行 效果图 实操步骤 注意,本代码在springboot环境下运行,jdk1.8 1.引入依赖 <dependency><groupId>…...
k8spod详解其二
一,资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小,以及其他类型的资源。 当为 Pod 中的容器指定了 request 资源时,调度器就使用该信息来决定将 Pod 调度到哪个节点上。当还为…...
golang包的管理
Go语言中包的使用 Go语言使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进…...
Windows10安装Anaconda与Pytorch的记录
这是一篇关于安装Anaconda和Pytorch的记录与复盘,写的原因是我电脑恢复系统之后东西全没了,再装Pytorch的时候一脸懵逼忘了怎么弄了,写篇记录以备我下一次安装。 1、Anaconda的安装 1.1、Anaconda安装包下载 下载链接: Free Download | An…...
图解Kafka高性能之谜(五)
高性能的多分区、冗余副本集群架构 高性能网络模型NIO 简单架构设计: 详细架构设计: 高性能的磁盘写技术 高性能的消息查找设计 索引文件定位使用跳表的设计 偏移量定位消息时使用稀疏索引: 高响应的磁盘拷贝技术 kafka采用sendFile()的…...
opencv在linux上调用usb摄像头进行拍照
功能 1.按照指定的文件名创建文件夹,创建之前判断该文件夹是否存在 2.调用摄像头按可调整窗口大小的方式显示 3.按esc退出摄像头画面 4.按p保存当前摄像头的画面,并按当前时间为照片的名字进行保存打开终端查看是否有摄像头 ls /dev/video*一般video1就…...
软考之知识产品+例题
知识产权 保护期限 公民作品 没有限制 署名权、修改权、保护作品完整权 作者终生及其死亡后的第 50 年的 12月31日 发表权、使用权、获得报酬权 单位作品 首次发表后的第 50 年的 12月31 日,若未发表则不受保护 发表权、使用权、获得报酬权 公民软件作品 没…...
玩了一下 Jenkins,最新版本 + JDK11
背景 今年五月的时候玩了一下 Jenkins,最新版本 2.414.3 ,JDK 11 。本机有两个 JDK,只放到 Tomcat 里面了,看到了一个启动页面,后面有其他事情就忘记了。最近又想起来,觉得还是应该玩一下这么有技术含量的…...
自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试,开源项目
自定义的卷积神经网络模型CNN,对图片进行分类并使用图片进行测试模型-适合入门,从模型到训练再到测试:开源项目 开源项目完整代码及基础教程: https://mbd.pub/o/bread/ZZWclp5x CNN模型: 1.导入必要的库和模块&…...
C# 使用.NET的SocketAsyncEventArgs实现高效能多并发TCPSocket通信
简介: SocketAsyncEventArgs是一个套接字操作得类,主要作用是实现socket消息的异步接收和发送,跟Socket的BeginSend和BeginReceive方法异步处理没有多大区别,它的优势在于完成端口的实现来处理大数据的并发情况。 BufferManager类…...
设计模式——观察者模式(Observer Pattern)+ Spring相关源码
文章目录 一、观察者模式定义二、例子2.1 菜鸟教程例子2.1.1 定义观察者2.1.2 定义被观察对象2.1.3 使用 2.2 JDK源码 —— Observable2.2.1 观察者接口Observer2.2.1 被观察者对象Observable 2.3 Spring源码 —— AbstractApplicationContext2.3.1 观察者2.3.2 被观察者 2.3 G…...
openpnp - code review - 开机对话框历史记录和贡献者名单
文章目录 openpnp - code review - 开机对话框历史记录和贡献者名单概述笔记D:\my_openpnp\openpnp_dev_2022_0801\src\main\java\org\openpnp\gui\AboutDialog.javaEND openpnp - code review - 开机对话框历史记录和贡献者名单 概述 偶然发现, 自己打包后的openpnp, 开机后…...
JavaSE22——HashMap
集合框架_HashMap 一、概述 HashMap 是用于存储 Key-Value 键值对的集合。 (1)HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,所以具有很快的访问速度,但遍历顺序不确定。 (2&…...
「图像 merge」无中生有制造数据
在进行一个新项目的时候,往往缺少一些真实数据,导致没办法进行模型训练,这时候就需要算法工程师自行制作一些数据了,比如这篇文章分享的 bag 目标检测,在检测区域没有真实的 bag数据 此时,就可以采用图像拼…...
RK3588之ArmSoM-W3 + MPP实现多路硬解码拉流
简介 学习完MPP的解码Demo之后,想必大家都想通过一个项目来进行RK3588-MPP的解码实战。本篇文章就基于ArmSoM-W3开发板,开发一个多路硬解码项目,实现四路MPP硬解码拉流显示实现的效果如下: RK3588四路MPP硬解码拉流 环境介绍 硬件…...
【Rust日报】2023-10-29 隆重推出 Rerun 0.10!
Lapce代码编辑器发布v0.3.0 Lapce代码编辑器新发布v0.3.0! https://lapce.dev/ 距离我们上次发布已经过去很长一段时间了。我们正忙着在自己的 UI 工具包Floem中重写 Lapce ,这将使我们以后对 UI 部分代码的开发变得更容易、更快。 另一件值得注意的事情…...
AI智能识别如何助力PDF,轻松实现文档处理?
AI智能识别如何助力PDF,轻松实现文档处理? 随着科技的不断发展,人工智能(AI)在各个领域都发挥着重要的作用。其中,文档智能( Document AI )在金融、医疗、教育、保险、能源、物流等…...
【SA8295P 源码分析】114 - 将Android GVM userdata文件系统从 EXT4 修改为 F2FS
【SA8295P 源码分析】114 - 将Android GVM userdata文件系统从 EXT4 修改为 F2FS 一、代码修改方法1. BoardConfig.mk2. 修改 fstab二、开机进入 adb 验证2.1 验证 userdata 修改 f2fs 文件系统格式成功2.2 测试 f2fs 文件系统性能:androbench.apk系列文章汇总见:《【SA8295P…...
LeetCode 387 字符串中的第一个唯一字符 简单
题目 - 点击直达 1. 387 字符串中的第一个唯一字符1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 1. 387 字符串中的第一个唯一字符 1. 题目详情 给定一个字符串 s ,找到 它的第一个不重复的字符,并返…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
