Kotlin变量的类型转换简介

Android  Kotlin  2024年9月18日 am8:50发布2个月前更新 91es.com站长
80 0 0

前言

简单记录一下Kotlin变量类型的转换,记录于此,方便自己查阅。

正文

如果将一种数据类型的值赋给另一种不同的数据类型的变量时,则需要进行数据类型转换

根据转换方式的不同,数据类型转换可分为两种:智能类型转换强制类型转换

类型检查

在类型转换前,为了避免异常,可以通过is来进行类型检测。

  1. is判断对象是否是某个类的实例。

  2. !is判断对象不是某个类的实例、

var mString:Any = "谷歌一下"
if (mString is String) {
    Log.d(TAG, "is String ")
} else {
    Log.d(TAG, "is not String ")
}
is String

mString是String的实例。

var mString:Any = "谷歌一下"
if (mString !is Int) {
    Log.d(TAG, "is not Int ")
} else {
    Log.d(TAG, "is Int ")
}
is not Int

mString不是Int的实例。

智能类型转换

Kotlin编辑器可以自行判断对象类型,然后进行转换。

拿上面例子来说

var mString:Any = "谷歌一下"
if (mString is String) {
    Log.d(TAG, "is String ")
} else {
    Log.d(TAG, "is no String ")
}

虽然mString定义为Any类型,但mString最终还是判断为String的实例。这个就是编辑器自动进行转换的。

所以在Kotlin中,我们可以省略定义的类型。比如

// Int类型变量
var mNumber = 1

编译器会自动推断为Int

强制类型转换

当在某些特殊情况下无法进行智能类型转换时,还可以进行强制类型转换。

通过as操作符进行强制类型转换。

open class Person {
}
class Student : Person() {
}
var student = Student()
var person = student as Person
Log.d(TAG, "test 1 : $person ")
  1. 子类可以强转为父类

  2. 父类不可以强制为子类(抛出异常)。

并不是所有的都可以强制转换,不支持的会抛出异常。

var mInt = 1
var mString = mInt as String
Log.d(TAG, "test: $mString")

运行后crash了

Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

如果不确定是否可以强制转换,可以使用as?

var mInt = 1
var mString = mInt as? String
Log.d(TAG, "test: $mString")

输出结果

test: null

类型不兼容,使用 as? 运算符就会返回null。

参考文章

  1. 《Kotlin从基础到实战》

 历史上的今天

  1. 2021: 麦芒:生活与危机(0条评论)
  2. 2019: 里柯克:吃饼冠军乔.布朗(0条评论)
  3. 2018: Fragment的简单使用(0条评论)
版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

Java的反射简介

前言本文主要参考其他作者的文章,然后自己整理一下,原文写得很仔细,但还得自己走一遍流程。感谢大佬分享。正文什么是Java的反射机制java允许开发者在程序运行过程中操作(访问和修改)类的各种属性以及方法。获取Class类对象java给我们提供了三种方式获取Class类对象。Sour...

Linux一键安装web环境使用

看本教程需要需要在阿里云的云市场中购买阿里云linux一键安装web环境(含视频教程)安装包,这个我很早就在使用。偶然发现这教程还是可以的额,因此在这摘抄一下自己平常使用的,算是总结吧。目前使用apache比较多,因此以这个为准。0、一键安装后的路径网站目录:/alidata/ww...

Android取消和开启提示音

前言如果系统设置[声音]选项中关闭了[触摸提示音],则所有的View都没有提示音。开启系统设置[触摸提示音]基础上,View或ViewGroup设置setOnTouchListener()或者setOnLongClickListener()都是没有提示音的。开启系统设置[触摸提示音]基础上...

张小娴:有女人爱的男人

从来没有光顾过这么“雅致”的的士。三十来岁的司机衣着整齐,精神爽利,与证件上的照片一样,不像大部分的的士司机,相片比真人至少年轻十多岁。车上的椅套光洁如新,车尾玻璃窗下面,放着一件叠好的风衣,数盒柠檬茶、菊花茶,几瓶矿泉水,还有香口珠,我差点以为是拿来卖给乘客的。“是我太太放在这里的。夏天嘛,乘客...

Android机型适配相关摘抄

前言由于Android分辨多样,在做适配时总感觉困惑,怎么配置?(哈哈哈,之前项目一直都是一个分辨率的,不用做兼容,不同客户需求不一样)6个主流分辨率:800480、480320、1280720、854480、960540、19201080因此,摘抄如下内容。正文屏幕相关概念屏幕尺寸、...

[摘抄]Vim的四种模式

 一.启动Vim1.双击桌面的图标,就可以启动Vim(是图形界面的)2.在开始菜单---点--运行 接着输入 vim 或者gvim,就可以启动Vim或Gvim了.二.Vim的模式1.Vim常用模式.命令模式(command-mode)插入模式(insert-mode)可视模...