Kotlin类型不匹配报错inferred type is String? but String was expected如何解决
错误原因
e: C:\Users\bagji\MyApplication7\app\src\main\java\com\example\myapplication\AppSettings.kt: (39, 16): Type mismatch: inferred type is String? but String was expected
该报错由Android系统SharedPreferences的API特性导致:getString()方法的返回值被标记为可空类型String?,即使你传入了非空的默认值,SDK层面的方法定义仍然会返回可空类型,和你代码中要求的非空String返回类型不匹配。
修复方案
你可以选择任意一种方案修改涉及getString调用的两个方法即可:
方案1:非空断言(实现最简单)
因为你已经传入了明确的非空默认值,不可能出现空值,直接加!!断言非空即可:
fun getSettingAsString(context: Context, key: String): String { return getPrefs(context).getString(key, "")!! } fun getSettingList(context: Context, key: String): JSONObject{ return JSONObject(getPrefs(context).getString(key, JSONObject().toString())!!) }
方案2:Elvis运算符兜底(稳定性更高)
如果要避免极端场景下的异常,可加兜底逻辑:
fun getSettingAsString(context: Context, key: String): String { return getPrefs(context).getString(key, "") ?: "" } fun getSettingList(context: Context, key: String): JSONObject{ val jsonStr = getPrefs(context).getString(key, JSONObject().toString()) ?: JSONObject().toString() return JSONObject(jsonStr) }
错误截图

内容的提问来源于stack exchange,提问作者피아노
相关产品推荐
相关产品推荐

