被自己的愚蠢惊到了,一行代码看看你也会中标不?

106 阅读1分钟

场景

kotlin用了也差不多5,6年了.今天碰到一个很常见的场景,如果xx Int类型为null,返回字符串"0",否则toString(). 之前用各式各样的方法去实现过,但是总觉得不够优雅.心血来潮问了一下AI.

AI给了我如下解决方案:

walletState.balance?.toString() ?: "0"

继续下面阅读前,请先思考一下下面两个问题

  • 问题1
    balance为null时返回什么?

  • 问题2
    balance不为null时返回什么?

我当时的内心

按照我之前的理解,这个行不通才对.xx?.toString()应该返回"null"而不是null,从而导致?:0永远不成立.但是抱着试一试的心情,我把代码copy进android studio,惊讶的发现并没有在?:0提示任何不可达或者无效,那么大概说明ai给出的方案时可行的.我这才意识到,可能自己对kotlin的空安全的理解一直都是错误的.

正确理解

一句话总结.?:当成一个整体,它左边最近的一个?左边的值为null时,返回?:冒号右边的值.而不是?:这个整体的?的左边的值为null时,如何如何!!!!

结合代码就是balance只要为空了,那么就返回"0",都不会去执行toString()了!!

结语

怎么说了呢?检讨自己的浮躁和自负这些都还是小事.想到自己心里不知道还有多少这种我认为就是这样,但是其实是错误的概念,不禁倒吸一口寒气.望共事一起生活的人理解包含,也望自己能对他人多一份包容.与诸君共勉!