Kotlin扩展函数(also apply run let)和with函数

news2024/11/18 11:23:46

also apply run let with的使用例子


    private fun testOperator() {
        /**
         * also
         */
        val person = Person("ZhangSan", 18)
        person.also {
            // 通常仅仅打印使用, 也可以通过it修改
            it.name = "ZhangSan1"
            println("also inner name: " + it.name)
        }
        println("also name: ${person.name}")
        /**
         * apply
         */
        person.apply {
            // 因为this的缘故, 访问成员变量更容易, 不需要使用"it."或者"this."
            increaseAge()
            name = "WangWu"
            println("apply inner age: $age")
        }
        println("apply name: ${person.name}")
        /**
         * run
         */
        val person1 = Person("HeHe", 18)
        val person2 = person1.run {
            // run和let都会返回最后一个元素
            println("run inner name: $name")
            Person("Hello", 18)
        }
        println("run name: ${person1.name}")
        println("run name: ${person2.name}")
        /**
         * let
         * run可以完全替代let和with, let可以对空情况的统一处理
         */
        var person3: Person? = Person("LiSi", 18)
        val flag = Random.nextInt(10)
        if (flag > 0) {
            person3 = null
        }
        person3.let {
            if (it == null) return@let
            it?.name = "LiSi1"
            println("let inner person3: $person3")
        }
        println("let person3: $person3")

        /**
         * with
         * with不是扩展函数, 属于标准库函数
         */
        val person4: Person = Person("MaLiu", 18)
        val result = with(person4) {
            age = 24
            println("with inner age: $age")
            480
        }
        println("with result: $result")
    }

    class Person(var name: String, var age: Int) {
        fun increaseAge() {
            age += 1
        }

        fun changeName() {
            name = "YongLe"
        }
    }

扩展函数和with函数的特点概括

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1884141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DevOps认证是什么?DevOps工具介绍

DevOps 这个词是由Development(开发) 和 Operations(运维)组合起来的,你可以把它理解成为一种让开发团队和运维团队紧密合作的方法。 DevOps从2009年诞生到现在已经14年多了,一开始大家还在摸索&#xff0…

【gitee使用教程】(创建项目仓库并上传代码简易版)

gitee使用教程,创建项目仓库并上传代码简易版 1.在码云上创建一个仓库2.将代码克隆到本地1.复制仓库地址2.找到你想要放置的文件位置,右键点击更多选项,选择Git Clone3.将复制的仓库地址填入URL 3. IDEA结合GIT和Gitee的简单使用idea需要识别…

69. x 的平方根(简单)

69. x 的平方根 1. 题目描述2.详细题解3.代码实现3.1 Python方法一:逐个遍历方法二:二分查找 3.2 Java 1. 题目描述 题目中转:69. x 的平方根 2.详细题解 不能使用系统内置的函数,寻找某个数(假定为x)的…

【传知代码】揭秘AI如何揪出图片中的“李鬼”(论文复现)

在数字化时代,我们时常被各种图像信息所包围。然而,这些图像中有时隐藏着不为人知的秘密——被篡改的文字或图像。这些被篡改的内容可能误导我们的判断,甚至在某些情况下造成严重的后果。幸运的是,随着人工智能(AI&…

淘宝用户行为分析大数据可视化

文章目录 1. 项目概述2. 技术栈3. 目录结构4. 数据处理流程5. 前端部分5.1 HTML (index.html)5.2 CSS (layer.css)5.3 JavaScript (chart.js) 6. 后端部分7. 数据可视化7.1 ECharts 图表 8. 主要功能模块9. 代码解析10. 数据接口11. 项目功能描述12. 代码功能实现12.1 HTML (in…

定位OOM(Out of Memory)

一、项目部署时添加一条JVM参数 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPathxxx 其中-XX:HeapDumpPathxxx是发生oom时保存记录文件的路径 二、发生oom时生成记录文件 三、VisualVm下载安装 VisualVm官网:VisualVM: Home 通过官网下载后的压缩包进行解压 打开…

在 CentOS 上安装 Docker Engine

前言 Docker 是啥之类的就不必多说了,直接上安装步骤。 官网安装教程地址:https://docs.docker.com/engine/install/centos/ 1.Uninstall old versions (卸载旧版本) Older versions of Docker went by docker or docker-engin…

idea修改静态资源,不重启idea直接生效方法

1、Run->Edit Configurations 2、按下图选中 3、点ok,之后修改静态资源后点非idea界面(如状态栏),就会自动配置了。

【秋招突围】2024届秋招笔试-科大讯飞笔试题-03-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系计划跟新各公司春秋招的笔试题 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📧 清隆这边…

武汉星起航:成功挂牌上股交,领航亚马逊跨境电商,共创未来辉煌

在全球电商的竞争格局中,亚马逊凭借其卓越的服务、丰富的商品种类和高效的物流体系,始终稳坐全球电商市场的头把交椅。而在这股不可阻挡的电商浪潮中,武汉星起航电子商务有限公司凭借其前瞻性的战略布局和强大的运营能力,成功在20…

【鸿蒙学习笔记】基础组件Blank:空白填充组件

Blank:空白填充组件 Column({ space: 20 }) {Row() {Text(Bluetooth)Blank().color(Color.Yellow)Toggle({ type: ToggleType.Switch }).margin({ top: 14, bottom: 14, left: 6, right: 6 })}.backgroundColor(Color.Pink).borderRadius(15).padding({ left: 12 }…

代码随想录算法训练营第40天| 518. 零钱兑换 II、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)

518. 零钱兑换 II 题目链接:518. 零钱兑换 II 文档讲解:代码随想录 状态:不会 思路: 和494.目标和类似,这题属于组合问题,当我们有一个硬币coin时,对于每个金额j,通过添加这个硬币&a…

Java--Map集合

Map 映射(map)是存储键和值间关联(即,键值对)的对象。给定一个键,可以找到其值。键和值都是对象。键必须唯一,但是值可以重复。 支持映射的接口 接 口 描 述 Map 将唯一键映射到值 NavigableMap 扩展SortedMap接口,以处理…

构筑政企创业实战技能新生态,赋能实战技能培训

国际数字影像产业园在创业实战技能培养方面具有显著的优势和资源。通过丰富的产业资源、专业的培训体系以及实战机会的提供,创业者可以全面提升自己的创业实战技能,为成功创业打下坚实的基础。 一、国际数字影像产业园在创业实战技能培养方面的优势 1、…

2.1 程序设计语言基础

程序设计语言概述 常见的编程语言 编译和解释 程序设计语言的基本成分 数据成分、运算成分、控制成分、传输成分 函数 传值调用、传址调用 编译程序基本原理

ros1仿真导航机器人 navigation

仅为学习记录和一些自己的思考,不具有参考意义。 1navigation导航框架 2导航设置过程 (1)启动仿真环境 roslaunch why_simulation why_robocup.launch (2)启动move_base导航、amcl定位 roslaunch why_simulation nav…

平凉擀面皮:西北风味的代表

平凉擀面皮是一道具有地方特色的传统美食,具有以下特点: 历史悠久:擀面皮自唐代冷淘面演变而来,历史悠久。选料精良:采用冬小麦精粉为原料,制作过程中不添加任何食品添加剂。口感独特:口感筋道…

筑算网基石 创数智未来|锐捷网络闪耀2024 MWC上海

2024年6月26日至28日,全球科技界瞩目的GSMA世界移动大会(MWC 上海)在上海新国际博览中心(SNIEC)盛大召开。作为行业领先的网络解决方案提供商,锐捷网络以“筑算网基石 创数智未来”为主题,带来了…

asp.net的承载环境的配置与应用

[S1513]基于环境变量的配置初始化 应用启动的时候会将当前的环境变量作为配置源来创建承载最初配置数据的IConfiguration对象,但它只会选择名称以“ASPNETCORE_”为前缀的环境变量(通过静态类型Host的CreateDefaultBuilder方法创建的HostBuilder默认选择…

【笔记】记录一次全新的Java项目部署过程

记录一次全新的Java项目部署过程 环境:CentOS7 一、初始环境准备 yum install wget -y yum install vim -y yum install net-tools -y mkdir /data mkdir /data/html mkdir /data/backend一、安装JDK 17 安装JDK17 # 下载rpm wget https://download.oracle.com…