我是靠谱客的博主 淡定秀发,这篇文章主要介绍kotlin的空类型和智能类型转换,现在分享给大家,希望可以做个参考。

?的介绍

复制代码
1
2
3
fun getName():String{ return null

这样写他会报不能为空的异常

复制代码
1
2
3
4
fun getName():String?{ return null }

加一个问号就可以解决问题

?使用的时候

复制代码
1
2
println(getName().length)

这样是会报异常的因为getname可以为空 而空是没用长度的

所以这样写

复制代码
1
2
3
4
5
fun main(args: Array<String>) { // val name:String= getName()?:"hello" println(getName()?.length) }

这样写了就表示如果是空就不执行返回空

?+:是选择表达式

复制代码
1
2
3
4
5
fun main(args: Array<String>) { val name:String= getName()?:"hello" println(name.length) }

如果为空就执行:后面的内容 不为空就照常执行

kotlin的智能类型转换

看java的例子
定义了一个parent类和Child类

复制代码
1
2
3
4
public class Parent { }

子类有方法

复制代码
1
2
3
4
5
6
7
8
public class Child extends Parent { private String name; public String getName() { return name; } }

一般的类型转换

复制代码
1
2
3
4
5
6
7
8
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里面

复制代码
1
2
3
4
5
6
7
8
fun main(args: Array<String>) { val parent: Parent=Child() if (parent is Child){ println(parent.name) } }

已经知道是他的子类后不需要强转了 简称智能转换

有时候会遇到一个类不知道能不能强转的情况

看java例子

复制代码
1
2
3
4
5
public static void main(String[] args) { Parent parent=new Parent(); System.out.println(((Child)parent).getName());

这么写会报错
因为是parent类型的

但是我们不希望他们crash程序
再看kotlin里面

复制代码
1
2
3
val parent=Parent() val child: Child? = parent as Child

这么写是和java一样会报错
但是只要加上问好就行了

复制代码
1
2
3
val parent=Parent() val child: Child? = parent as? Child

如果不能转就返回空

最后

以上就是淡定秀发最近收集整理的关于kotlin的空类型和智能类型转换的全部内容,更多相关kotlin内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(89)

评论列表共有 0 条评论

立即
投稿
返回
顶部