kotlin类型检测与类型转换

news2024/12/27 14:54:49

一、is与!is操作符

1、使用  is 操作符或其否定形式 !is  在运行时检测对象是否符合给定类型。
fun main() {
    var a = "1"
    if(a is String) {
        println("a是字符串类型:${a.length}")
    }
    // 或
    val b = a is String
    println(b)
}

二、"不安全的"转换操作符

1、如果转换失败,转换操作符会抛出一个异常。kotlin中的不安全转换使用中辍操作符 as
fun main() {
    val a:String? = null
    val b = a as String
    println(b)
}

输出: 

null 不能转换为String, 因为该类型不是可空的,如果转换时,不确定a是否可空(null),在类型转换的右侧使用可空类型进行转换:

fun main() {
    val a:String? = null
    val b = a as String?
    println(b) // 输出 null
}

再来看一段代码: 

fun main() {
    // 会类型推断为 Int类型
    val a:Any = 1
    // Int类型转String 不管是否加了?都会抛出异常
    val b = a as String?
    println(b) 
}

 上边代码转换失败:

三、"安全的"可空转换操作符

1、为了避免异常,还可以使用安全转换操作符 as? ,它可以在失败时,返回 null。
fun main() {
    val a:String? = null
    val b = a as? String
    println(b) // 输出 null
}

四、总结

(1)as 转换操作符转换失败时,会抛出异常。
(2)as String? 转换 null时,不会抛出异常,会返回null,但是如果转换为别的类型,则会抛出异常。
(3)as? 转换失败时,不会抛出异常(比较抗霍霍)。

is底层,用脚想也能猜出来,应该是instanceof判断的,不会抛出任何异常:

boolean b = a instanceof String;

 as和as String? 底层都是强转为String类型,没有做任何处理,所以抛出异常理所应当:

String b = (String)a;

再来看下as?底层代码:

public static final void main() {
    Object a = 1;
    // 把a包装成 Integer(自动装箱)
    Integer var10000 = a;
    // 判断 a 是否是 String 的实例,由于 a 实际上是 Integer 类型(装箱的 1),
    // 这个条件总是 true,因此 var10000 被赋值为 null
    if (!(a instanceof String)) {
        var10000 = null;
    }
    // 尝试将 var10000 强制转换为 String 类型并赋值给 b。
    // 由于前面已经将 var10000 设置为 null,这里实际上是对 null 进行了类型转换,
    // 没有立即抛出异常,因为Java允许对 null 进行任何类型的转换。
    String b = (String)var10000;
    boolean var2 = false;
    System.out.println(b);
}

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

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

相关文章

ARM32开发--IIC原理

知不足而奋进 望远山而前行 目录 文章目录 前言 目标 内容 I2C通讯规则 I2C写操作 I2C读流程 通讯信号 开始 结束 发送数据 bit发送 Byte发送 等待响应 接收数据 bit接收 Byte接收 发送响应 总结 前言 在现代消费电子和工业电子领域,各种类型的…

如何察觉自己或者家人是否出现了听力问题?

如何察觉自己或者家人是否出现了听力问题呢?可以从以下两个方面观察: 一.社交方面 • 是不是经常需要别人重复刚说的话才能理解? • 多人对话中是否感到吃力? • 觉得别人讲话含糊不清? • 在人多嘈杂…

YASKAWA机器人HW1171921-B电缆维修

安川机器人作为现代工业自动化的重要设备,其稳定运行对于生产线的连续性和效率至关重要。然而,随着使用时间的增长,可能会出现各种YASKAWA机器人本体线缆故障,如断线、短路、接触不良等。 一、安川工业机器人电缆维修前的准备 在进…

【Python】已解决报错 TypeError: Missing 1 Required Positional Argument

本文摘要:【Python】使用 Python 中将字符串转换为数组,并总结提出了几种可用方案。 😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博…

谁才是产品界的真正王者?AI产品经理对决普通产品经理!

不同类型的产品经理可能有着不同的工作内容,那么,AI产品经理和普通产品经理之间的工作内容、工作职责、技能要求等方面,存在着哪些具体差异?这篇文章里,作者就进行了总结和梳理,一起来看看吧。 一、工作内容…

R语言绘制三变量分区地图

参考资料: https://mp.weixin.qq.com/s/5c7gpO2mJ2BqJevePJz3CQ tricolore包教程:https://github.com/jschoeley/tricolore 学习笔记:Ternary choropleth maps 1、测试实例 代码: library(ggplot2) library(rnaturalearthdata) …

「漏洞复现」I Doc View 在线文档预览 qJvqhFt.json 任意文件读取漏洞(XVE-2024-2115)

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

手机如何找回我的相册?来看这篇文章,2个方法即刻获取

手机相册已经成为我们存储和分享生活瞬间的重要工具,每当我们在旅行、聚会或其他重要时刻拍摄下一张张珍贵的照片时,相册就成为了我们回味这些瞬间的宝贵载体。然而,当我们不小心删除了相册时,那些曾经美好的回忆似乎也随之消失了…

沸点 | LDBC与SIGMOD联合研讨,推动图数据库创新与标准化

当地时间6月9日,国际基准官方平台关联数据基准委员会(LDBC,Linked Data Benchmark Council)与SIGMOD 2024(是全球最具国际影响力的数据管理、数据处理和数据存储领域的学术顶会之一,ACM SIGMOD/Big Data in…

win11联想版,如何下载Visual Basic 6.0精简版

一、背景 Visual Basic 6.0精简版、Visual Basic Mini,等 Win11系统,网上找压缩包下载,无法成功。 二、解决 通过下载联想应用商店,在应用商店中下载 步骤一 hi,推荐你使用联想应用商店,商店提供上万款…

【大分享03】浙江某区县“个人全生命周期档案”综合智治应用实践

关注我们 - 数字罗塞塔计划 - 本篇是参加由电子文件管理推进联盟联合数字罗塞塔计划发起的“大分享”活动投稿文章,来自杭州安铂数据科技有限公司,作者:智治项目组。 一. 项目概述 根据《政务服务电子文件归档和电子档案管理办法》&#xf…

上午接到被裁员的通知,下午就收到涨薪30%的offer,我生怕公司反悔,当天就找HR签了离职协议,拿到了N+1赔偿!

大家好,我是瑶琴呀。 昨天看到一位网友分享自己被裁的经历:最近这段时间在面试,没成想上午刚被 HR 约谈裁员的事情,下午就收到下家公司涨薪 30% 的offer,这可真是天时人和,当天下午就找 HR 签了离职协议&a…

计算机网络知识点(三)

目录 一、简述TCP连接和关闭的状态转移 二、简述TCP慢启动 三、简述TCP如何保证有序 四、简述TCP常见的拥塞控制算法 五、简述TCP超时重传 一、简述TCP连接和关闭的状态转移 状态转移图 图中上半部分是TCP的三次握手过程的状态变迁,下半部分是TCP四次挥手过程的…

ASCII码表介绍

一、ASCII码是什么 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它可分为基于7位二进制数的标准版本和基于8位二进制数的扩展版本,标准版本主要用于显示现…

响应式企业网站建站系统源码 模版丰富+一站式建站 全开源可二次开发 带源码包+搭建部署教程

系统概述 在数字化转型的浪潮中,企业官网作为品牌展示、产品推广及客户服务的重要窗口,其建设质量直接影响着企业的线上形象与市场竞争力。响应式企业网站建站系统源码的出现,为企业提供了一种高效、灵活且成本可控的建站解决方案。 代码示…

如何解除内存卡的写保护并格式化为exFAT文件系统

最近有客户提问内存卡提示写保护,且无法格式化为exFAT格式的问题,可能是由于多种原因引起的。以下是一些可能的解决方法: 1. 检查物理写保护开关 一些SD卡和MicroSD卡适配器上有一个小的物理开关,可以启用或禁用写保护。确保这个…

在线的、完全免费的、提供回放的技术传播方面的大会:Adobe DITA World 2024

▲ 搜索“大龙谈智能内容”关注公众号▲ 最近美国苹果公司召开了WWDC24,国内不少人熬夜观看。 对于我来说,我更关注在美国召开的另外一个会,它就是Adobe DITA world。 一年一度的Adobe DITA world号称是全球最大的DITA营销和技术传播专业人…

云消息队列 ApsaraMQ 成本治理实践(文末附好礼)

作者:家泽、稚柳 前言: 在 AI 原生应用架构浪潮中,消息队列需支持大规模数据和复杂 AI 模型训练与推理场景下的高效异步通信,其成本效益优化也日益受到重视。面对大模型或大数据量,消息量显著增加,云消息…

爱要常觉亏欠,客要一味款待?

一连病了多日,多数时间躺床上静养。今晨上网浏览,见到罗翔先生在其《圆圈正义》一文中,写有以下这样一句话,读后深受启迪,也让笔者更加懂得应当怎样去处理家庭和社会的人际关际。特实录如下,与网友分享。 网…

重生奇迹mu魔法师介绍

魔法师擅长:远距作战、攻击&辅助魔法使用 转职:魔导师(2转),神导师(3转) 魔法师可以通过多样的魔法,展现华丽的效果和强大的实力。成长初期因为体力少,经常受到死亡…