在我所有的 kotlin 项目中,我都发现了涉及平台类型的新警告。例如
val s: String = sharedPrefs.getString("key", "defaultValue")
Run Code Online (Sandbox Code Playgroud)
产生警告
Type mismatch: inferred type is String? but String was expected
它编译得很好,所以它似乎与 kotlins 强制执行可空类型无关。但是这个警告似乎在最近几周突然出现,这可能与 android studio 或 kotlin 插件的变化有关。
在这种特定情况下,为什么推断的类型与我在第二个参数中提供的类型不匹配(aString不是 a String?)
查看 的代码SharedPreferences,它的定义为
@Nullable
String getString(String key, @Nullable String defValue);
Run Code Online (Sandbox Code Playgroud)
在Android Studio中查看它,代码暗示
@Contract(value="_,!null->!null")
Run Code Online (Sandbox Code Playgroud)
但这并未在源代码本身中定义,Android Studio也未考虑这一点。当您仔细查看警告本身时,您会发现它是Kotlin NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS JVM错误诊断。
无论如何,@Nullable注释只是一个建议,显式声明优先。
| 归档时间: |
|
| 查看次数: |
1507 次 |
| 最近记录: |