kotlin的空类型和智能类型转换

?的介绍

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

如果不能转就返回空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值