android - Kotlin 类型不匹配,需要 : x found: x?

标签 android android-studio kotlin nullable

我发现很多参数都有错误

Type mismatch
required: FragmentActivity
found: FragmentActivity?

我不确定解决此问题的最佳方法是什么。 目前,我将该行包装在一个变量中?.let { statement }

meViewModel = ViewModelProviders.of((iMainActivity as Fragment).activity, vmf).get(MeViewModel::class.java) }

进入

val fragmentActivity = (iMainActivity as Fragment).activity

fragmentActivity?.let 
{ 
   meViewModel = ViewModelProviders.of(fragmentActivity, vmf).get(MeViewModel::class.java) 
}

这是解决这个问题的正确方法吗

最佳答案

简短回答:是的。

这意味着编译器不确定 s.th.是 !=null。如果您确定它不为空,您还可以使用:

val fragmentActivity = (iMainActivity as Fragment).activity!!

这为您提供了 FragmentActivity 而不是 FragmentActivity? 并且您不需要 ?.let{}

请记住,这可能会抛出一个 NPE , 而

fragmentActivity?.let { fragment ->
   meViewModel = ViewModelProviders.of(fragment, vmf).get(MeViewModel::class.java) 
}

根本不会执行 .let{} 中的 block ,这通常比 NPE 危害小。参见 https://kotlinlang.org/docs/reference/null-safety.html了解更多。

关于android - Kotlin 类型不匹配,需要 : x found: x?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52948620/

相关文章:

java - 想要从 Sqlite 中查询之前添加的唯一行

Java:获取与枚举关联的对象

Android Studio 中缺少调试信息的 Android 应用程序

android - Android Studio 3 中的 "Sync project with gradle files"按钮在哪里?

multithreading - 为什么Executor.asCoroutineDispatcher不能像newFixedThreadPoolContext一样工作?

使用 mediaplayer 的 Android http 直播流媒体 URL

android - 将 Android Widget 限制为每台设备一个实例

android-studio - 安卓工作室 - "No analysis has been performed"

android - 使用实时数据、改造、mvvm 和存储库模式制作通用网络适配器

dictionary - 如何在 Kotlin 中反转 map ?