概述
?的介绍
fun getName():String{
return null
这样写他会报不能为空的异常
fun getName():String?{
return null
}
加一个问号就可以解决问题
?使用的时候
println(getName().length)
这样是会报异常的因为getname可以为空 而空是没用长度的
所以这样写
fun main(args: Array<String>) {
// val name:String= getName()?:"hello"
println(getName()?.length)
}
这样写了就表示如果是空就不执行返回空
?+:是选择表达式
fun main(args: Array<String>) {
val name:String= getName()?:"hello"
println(name.length)
}
如果为空就执行:后面的内容 不为空就照常执行
kotlin的智能类型转换
看java的例子
定义了一个parent类和Child类
public class Parent {
}
子类有方法
public class Child extends Parent {
private String name;
public String getName() {
return name;
}
}
一般的类型转换
public static void main(String[] args) {
Parent parent=new Child();
System.out.println(((Child)parent).getName());
if (parent instanceof Child){
System.out.println(((Child) parent).getName());
}
}
一般而言 去调用子类的方法需要强转,在判断的时候已经知道是子类了 还要强转 有点不合理
而在kot里面
fun main(args: Array<String>) {
val parent: Parent=Child()
if (parent is Child){
println(parent.name)
}
}
已经知道是他的子类后不需要强转了 简称智能转换
有时候会遇到一个类不知道能不能强转的情况
看java例子
public static void main(String[] args) {
Parent parent=new Parent();
System.out.println(((Child)parent).getName());
这么写会报错
因为是parent类型的
但是我们不希望他们crash程序
再看kotlin里面
val parent=Parent()
val child: Child? = parent as Child
这么写是和java一样会报错
但是只要加上问好就行了
val parent=Parent()
val child: Child? = parent as? Child
如果不能转就返回空
最后
以上就是淡定秀发为你收集整理的kotlin的空类型和智能类型转换的全部内容,希望文章能够帮你解决kotlin的空类型和智能类型转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复