safeAs方法漏洞

来源:9-2 实践:获取泛型实参

hardman_

2021-08-16

fun <T> Any.safeAs(): T? {
    return this as? T
}

这段代码如果this的类型和T的类型不一样的话就会报错。只是判断了this是否为空,看来不够safe(手动狗头)
不过我觉得对与这节小课时无伤大雅,自己尝试改了下

inline fun <reified T> Any.safeAs(): T? {
    return if (this is T){
        this
    }else{
        null
    }
}
写回答

1回答

bennyhuo

2021-08-16

对,本质上是要加inline reified,不然T就被擦除了。里面的if else到也不用,as? 会处理转失败的情况。

inline fun <reified T> Any.safeAs(): T? {
    return this as? T
}

0
2
bennyhuo
等我回头修复一下视频😁
2021-08-16
共2条回复

学会Kotlin 突破开发语言瓶颈

如果有一门语言可以取代Java,那么它一定是Kotlin。

1777 学习 · 487 问题

查看课程