MST
星途 面试题库

面试题:Kotlin空安全与类型检查的复杂应用

假设有一个函数接收一个Any类型的参数,要求在函数内部先进行类型检查,确认参数是字符串且不为空后,再计算其md5值并返回。请用Kotlin实现该函数,并说明你是如何利用Kotlin的空安全和类型检查机制保证程序健壮性的。
46.4万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
import java.security.MessageDigest

fun calculateMd5IfValid(input: Any?): String? {
    if (input is String && input.isNotEmpty()) {
        val messageDigest = MessageDigest.getInstance("MD5")
        val digest = messageDigest.digest(input.toByteArray())
        return digest.joinToString("") { "%02x".format(it) }
    }
    return null
}
  1. 空安全机制
    • 函数参数定义为Any?,表示参数可以为空。在函数内部,首先使用input is String && input.isNotEmpty()进行检查,这里input的类型是可空的Any?,通过is关键字检查input是否为String类型,并且isNotEmpty()方法检查字符串是否为空。如果input为空,这两个条件会有一个不满足,就不会执行计算MD5的逻辑,从而避免了空指针异常。
  2. 类型检查机制
    • 使用is关键字进行类型检查,input is String检查input是否是String类型。如果是String类型,Kotlin会自动进行类型智能转换,在后续input.isNotEmpty()调用以及计算MD5值的逻辑中,input就可以像String类型一样使用,无需显式类型转换,提高了代码的安全性和简洁性。如果input不是String类型,条件不满足,直接返回null,保证了程序不会因为类型不匹配而出现运行时错误。