Kotlin中对空的很多处理

news2024/7/4 5:32:32

代码图片直观效果

在这里插入图片描述

逐行解释Kotlin中对空的各种情况的使用

  private fun testNull() {
        val flag = 1
        var name: String? = null
        var user: User? // 有警告, 因为下面的赋值可以和这一行定义合并
        var zhangUser: User? = User()
        var wangUser: User = User() // 提示Explicitly given type is redundant here, 不用写第一个User
        var liUser = User()
        val tag = TAG // 这个小写的tag编译器没有设置下划线, 因为它是val类型不可修改
        Log.e(tag, "zhangUser: ${zhangUser?.account_name}") // 必须加问号
        Log.e(TAG, "wangUser: ${wangUser.account_name}") // 可以加问号, 可以加!!, 但是没必要
//        Log.e(TAG, "user: ${user?.account_name}") // 不能使用必须先赋值, 哪怕赋值为空
        user = null
        Log.e(TAG, "user: ${user?.account_name}") // 不报错, 但是警告, 因为编译器知道它是空, 已经推断出调用结果
//        wangUser = null // 不能赋值为空, 因为定义的时候就是不可能为空
        wangUser = User() // 可以改变, 因为不是val类型
        zhangUser = null // 可以赋值为空, 因为定义的时候就是可为空类型(User?)

//        println(zhangUser.account_name) // 不能这样调用, 因为可能为空
        if (zhangUser != null) {
            println(zhangUser.account_name) // 因为外层已经判断出不为空, 所以可以直接调用
        }
        if (flag == 1) { // 编译器不会检索if{}里面的代码对变量的影响, 对于{}以外的代码可能不知道这个值<可能为空>与否
            zhangUser = User()
        }
//        println(zhangUser.account_name) // 因为zhangUser可能为空, 所以这样可能报错
        println(zhangUser?.account_name) // 这种方式经常可以, 对于可为空对象是很好的办法
        println(zhangUser!!.account_name) // 不能推断内部的if{}下面对于变量的处理, 所以是否为空不确定
        println(zhangUser.account_name) // 因为上面的代码已经用!!假设了不可能为空, 相当于已经经过了一次assert操作, 如果出错上一步已经出了
    }
    class User {
        var account_name = "User" // 这一行代码也有警告"不要使用下划线", 但是PHP后端经常会使用下划线命名规则, 如果客户端还做一次转化浪费开发效率
    }

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

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

相关文章

STC89C52RC单片机设计的FM收音机+自动搜台+存储电台(程序+原理图+PCB)

资料下载地址&#xff1a;STC89C52RC单片机设计的FM收音机自动搜台存储电台&#xff08;程序原理图PCB) 1、实物图 2、部分程序 #include <reg52.h> #include "tea5767.h" #include "delay.h" #include "lcd1602.h" //K1:上一台 K2:下一…

如何快速使用JNI

文章目录 1_JNI是什么&#xff1f;2_使用3_扩展 1_JNI是什么&#xff1f; JNI 是Java Native Interface的缩写&#xff0c;通过JNI&#xff0c;允许Java代码与其他语言&#xff08;通常是C或C&#xff09;编写的本地应用程序或库进行交互。简而言之就是&#xff0c;Java可以通…

【王佩丰 Excel 基础教程】第一讲:认识Excel

文章目录 前言一、Excel软件简介1.1、历史上的其他数据处理软件与 Microsoft Excel1.2、Microsoft Excel 能做些什么1.3、Excel 界面介绍 二、Microsoft Excel 的一些重要概念2.1、Microsoft Excel 的几种常见文件类型2.2、工作簿、工作表、单元格. 三、使用小工具&#xff1a;…

基于RK3588的GMSL、FPDLink 、VByone及MIPI等多种摄像模组,适用于车载、机器人工业图像识别领域

机器人&工业摄像头 针对机器人视觉与工业检测视觉&#xff0c;信迈自主研发和生产GMSL、FPDLink 、VByone及MIPI等多种摄像模组&#xff0c;并为不同应用场景提供多种视场角度和镜头。拥有资深的图像算法和图像ISP专家团队&#xff0c;能够在软件驱动层开发、ISP算法、FPG…

电通出席2024年世界经济论坛(WEF),重申推动可持续发展创新和人才培育的承诺

中国&#xff0c;上海——电通将出席世界经济论坛2024年新领军者年会&#xff08;夏季达沃斯&#xff09;&#xff0c;本次大会将于6月25日至6月27日在中国大连举行。 2024年世界经济论坛主题为“未来增长的新前沿”&#xff0c;将聚焦于全球经济复苏、通胀缓解&#xff0c;以…

Softmax函数的作用

Softmax 函数主要用于多类别分类问题&#xff0c;它将输入的数值转换为概率分布。 具体来说&#xff0c;对于给定的输入向量 x [x_1, x_2,..., x_n] &#xff0c;Softmax 函数的输出为 y [y_1, y_2,..., y_n] &#xff0c;其中&#xff1a; 这样&#xff0c;Softmax 函数的输…

生成式人工智能和机器人技术是否即将取得最后的突破?

了解生成式人工智能与机器人技术的融合如何彻底改变从医疗保健到娱乐等行业 想象一下这样一个世界&#xff0c;机器人可以谱写交响乐、画出杰作、写出小说。这种创造力与自动化的迷人融合&#xff0c;由 生成式人工智能&#xff0c;不再是梦想&#xff1b;它正在以重大方式重塑…

25岁庆生|人大金仓带你这样过!

25年&#xff0c;是一个重要的时间节点 一个世纪的四分之一 百年基业的第一站&#xff0c;我们已经走过 人大金仓即将25岁了&#xff0c;感谢有你 趣味运动会 今日上午 二十五周年司庆终极活动正式开启 北京、成都、天津、青岛、西安 五地同步举行趣味运动会 活力四射的集体健走…

ros1仿真导航机器人 hector_mapping gmapping

仅为学习记录和一些自己的思考&#xff0c;不具有参考意义。 1 hector_mapping 建图过程 &#xff08;1&#xff09;gazebo仿真 roslaunch why_simulation why_slam.launch <launch><!-- We resume the logic in empty_world.launch, changing only the name of t…

鸿蒙开发Ability Kit(程序框架服务):【选择申请权限的方式】

选择申请权限的方式 应用在访问数据或者执行操作时&#xff0c;需要评估该行为是否需要应用具备相关的权限。如果确认需要目标权限&#xff0c;则需要在应用安装包中申请目标权限。 每一个权限的权限等级、授权方式不同&#xff0c;申请权限的方式也不同&#xff0c;开发者在…

Spring Boot项目如何配置跨域

1、通过SpringSecurity进行配置 2、前端跨域配置&#xff1a;proxy配置项用于设置代理规则&#xff0c;用于前端开发中与后端API交互时使用。

llama.cpp

https://github.com/echonoshy/cgft-llm 【大模型量化】- Llama.cpp轻量化模型部署及量化_哔哩哔哩_bilibili github.com/ggerganov/llama.cpp cd ~/code/llama.cpp/build_cuda/bin ./quantize --allow-requantize /root/autodl-tmp/models/Llama3-8B-Chinese-Chat-GGUF/Llama…

RISC-V异常处理流程概述

RISC-V异常处理流程概述 一、RISC-V异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册三、参考资料一、RISC-V异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先…

grpc编译

1、cmake下载 Download CMakehttps://cmake.org/download/cmake老版本下载 Index of /fileshttps://cmake.org/files/2、gprc源码下载&#xff0c;发现CMAKE报错 3、使用git下载 1&#xff09;通过git打开一个目录&#xff1a;如下grpc将放在D盘src目录下 cd d: cd src2&am…

CesiumJS【Basic】- #027 加载倾斜摄影文件

文章目录 加载倾斜摄影文件1 目标2 代码2.1 main.ts3 资源加载倾斜摄影文件 1 目标 加载倾斜摄影文件(通常是.json和.b3dm配套使用) 2 代码 有意改变了高度,因为大部分情况下是需要手动调节高度的 2.1 main.ts import * as Cesium from cesium;const viewer = new Ces…

基于Java的旅游景区网站系统(springboot+vue)

作者介绍&#xff1a;计算机专业研究生&#xff0c;现企业打工人&#xff0c;从事Java全栈开发 主要内容&#xff1a;技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流&#xff08;SCI论文两篇&#xff09; 上点关注下点赞 生活越过…

YonBIP 获取项目代码配置(图文)

项目开发文件在本地环境重新部署后&#xff0c;开发端机器需要重新部署&#xff0c;在此记录一下操作过程。 1. 新建项目目录&#xff0c;在目录下点鼠标右键&#xff0c;选 Git Bash Here 2. 开始下载代码&#xff0c;根据代码量多少&#xff0c;几分钟就能下载完成。 3. 下载…

深入模拟版图工程师基础学习:CMOS工艺解析

作为模拟版图工程师&#xff0c;了解CMOS&#xff08;互补金属氧化物半导体&#xff09;工艺是非常重要的&#xff0c;以下是我们需要掌握的基本内容&#xff1a; 1.基础理论&#xff1a;理解CMOS工艺的基本原理和结构&#xff0c;包括NMOS和PMOS晶体管的构造及其工作原理。&a…

30 哈希的应用

位图 概念 题目 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何判断一个数是否在这40亿个整数中 1.遍历&#xff0c;时间复杂度O(N) 2.二分查找&#xff0c;需要先排序&#xff0c;排序(N*logN)&#xff0c;二分查找&#xff0c;logN。…

什么是BIOS,如何进入BIOS设置?

什么是BIOS&#xff0c;如何进入BIOS设置&#xff1f;标题 &#x1f5a5;️ 什么是BIOS&#xff0c;如何进入BIOS设置&#xff1f;——默语的深入解析摘要引言正文内容&#x1f9e9; 什么是BIOS&#xff1f;&#x1f527; 如何进入BIOS设置&#xff1f;⚙️ 常见的BIOS设置选项…