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