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