Kotlin中SharedPreferences的getBoolean方法为何必须传入默认值?
这个是Android系统对SharedPreferences读取API的强制设计,从SDK初始版本开始,所有类型对应的get方法(getBoolean/getInt/getString等)都只提供了「键名+默认值」的方法签名,根本没有开放只传键名的重载方法,核心设计考量有两点:
- 兜底键不存在的异常场景
哪怕你在代码里写了对应键的写入逻辑,读取时键不存在的情况也无法100%避免:比如用户首次安装APP还没执行到写入逻辑、用户手动清除了APP缓存/应用数据、版本迭代时修改了存储键名、使用apply()异步写入时还没等数据落盘进程就被系统回收。如果没有默认值,方法遇到键不存在的场景没有确定的返回值,会直接导致业务逻辑不可控。 - 兜底类型不匹配的异常场景
SharedPreferences本身是弱类型的键值存储,没有强制校验同一个键对应值的类型,如果开发过程中误操作给同一个键写入了其他类型的值(比如给isLoggedIn键存了字符串类型的"yes"),调用getBoolean读取时发现类型不匹配,会直接返回你传入的默认值,不会抛出类型转换异常导致APP崩溃。
你写的仅传入键名的调用方式不符合系统方法的签名要求,编译阶段就会报错,自然无法正常运行。
补充说明:你示例里给登录状态传
false作为默认值是符合常规业务逻辑的设计,等价于所有异常场景下默认判定用户未登录,可以避免未授权访问的安全问题。
内容的提问来源于stack exchange,提问作者Ruthwik
相关产品推荐
相关产品推荐

