前言
简单记录一下Kotlin中变量类型的转换,记录于此,方便自己查阅。
正文
如果将一种数据类型的值赋给另一种不同的数据类型的变量时,则需要进行数据类型转换。
根据转换方式的不同,数据类型转换可分为两种:智能类型转换和强制类型转换。
类型检查
在类型转换前,为了避免异常,可以通过is来进行类型检测。
-
is判断对象是否是某个类的实例。
-
!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 ")
-
子类可以强转为父类
-
父类不可以强制为子类(抛出异常)。
并不是所有的都可以强制转换,不支持的会抛出异常。
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。
参考文章
历史上的今天
暂无评论...
随机推荐
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)可视模...