屎山代码一则

winterbells · 2024-10-5 15:03:32 · 27 次点击
大家都知道 Kotlin 有空安全

var s: String 代表不为空

var s: String? 代表可为空

奇葩操作来了,在我接手之前,除了绝大部分的基本变量,其余所有变量都是 String?、Objxx?

使用的时候:

```kt
if (S != null) print(s) else throw Exption("s shouldn't be null")
```

或者:

```kt
if (obj?.s == null) return
obj!!.s
```

一开始很好奇这个脑残写法是怎么来的

然后遇到了一个 crash 我找到根源了。我写的代码里没有用 String? ,但是却报了 NPE ,赋值的地方都查过了,不存在 null 。最终不断地调试发现每次页面 onDestory()的时候会有个反射递归地将所有变量和变量里的变量都设置成 null (说是在手动 GC…)。又因为魔改了生命周期+协程,读取变量的时候已经是 null 了,然后报错==

举报· 27 次点击
登录 注册 站外分享
2 条回复  
ghost024 初学 2024-10-5 19:03:28
哈哈哈哈哈,要么改反射,要么加入:)
nuonuojump 初学 2024-10-5 21:01:27
挺先进的代码,我都没想过还能在销毁的时候 手动做这种类型的 gc 。挺先进的。
返回顶部