Kotlin系列之智能转换

本文对比了Java中使用instanceof进行类型检查和类型转换的方法,并介绍了Kotlin中的智能转换特性,这种特性使得开发者可以直接调用特定类型的方法而无需显式转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天我们来学学Kotlin中的智能转化。

在开始说概念之前,我们先说说Java中的一个现象,然后再对比Kotlin中的处理。

Java中的instanceof

首先说说instanceof的用法,它是用来判断左边的对象是不是右边类的实例。如果左边的对象为null,则返回false。如果左边的对象是右边类的实例,或者是左边的对象是右边类的子类的实例,则返回true。下面放上一个Java示例代码。

Java代码

//账单类
public class Bill {
}

//用水账单
public class WaterBill extends Bill{
}

//电费账单
public class ElectricityBill extends Bill{
}

public class Main {
    //计算账单
    public double calcBill(Bill bill){
        double result = 0;

        if (bill instanceof WaterBill){
            //计算水费
            WaterBill waterBill = (WaterBill) bill;
        }

        if (bill instanceof ElectricityBill){
            //计算电费
            ElectricityBill electricityBill = (ElectricityBill) bill;
        }
        return result;
    }
}
复制代码

上面的代码通过传入的bill对象使用instanceof来判断它属于哪一种类型的账单,然后再调用不同的计算方法。当然上面的代码也可以不使用instanceof来处理,下面是另一种使用多态的写法。

public double calcBill(WaterBill waterBill){
    double result = 0;
    
    return result;
}

public double calcBill(ElectricityBill electricityBill){
    double result = 0;
    
    return result;
}
复制代码

上面的代码是使用了方法重载来避免使用instanceof。

Kotlin中的智能转换

智能转换,用一句话来总结就是它合并了类型检查和转换这两步操作。可能这么说有些空洞,上代码来解释。

上面的Java代码中,我们看到了这样的代码

if (bill instanceof WaterBill){
    //计算水费
    WaterBill waterBill = (WaterBill) bill;
}
复制代码

这里的代码就是先做了类型检查,之后再做了类型的转换。而在Kotlin中这两步操作它帮我们简化了。

Kotlin代码

interface Bill{

}

class WaterBill: Bill{
    //添加一个方法
    fun water(){

    }
}

class ElectricityBill: Bill {
    //添加一个方法
    fun electricity(){

    }
}
复制代码
fun calcBill(bill: Bill): Double{
    if(bill is WaterBill){
        //不需要强制转换,直接调用
        bill.water();
    }

    if (bill is ElectricityBill){
        bill.electricity();
    }
    return 0.0;
}
复制代码

上面的代码有几点需要注意:

  1. 上面有一个Bill接口,然后在具体类中通过:接口名表示实现该接口。
  2. 使用is来做类型检查,等同于Java中的instanceof
  3. 不需要强制类型转化,直接可以调用对应的方法。
写在最后

Kotlin中的智能转换特性可以让我们写出更简洁和优雅的代码,后续我们将会了解到更多的这种特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值