类型不匹配。必需:FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders>?成立:

Posted

技术标签:

【中文标题】类型不匹配。必需:FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders>?成立:【英文标题】:Type mismatch. Required: FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders>? Found: 【发布时间】:2021-04-16 05:38:52 【问题描述】:

我正在将 Java 代码移植到 Kotlin,但它会引发 Type Miss 匹配错误。

Java 代码:

private FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders> firebaseRecyclerAdapterChats;
    firebaseRecyclerAdapterChats = new FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders>(
            ChatObject.class,
            R.layout.item_messages_video_call,
            ChatVoiceViewHolders.class,
            dbMessagingMy
    ) 

Kotlin 代码:

private var firebaseRecyclerAdapterChats: FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders>? = null
    firebaseRecyclerAdapterChats = object : FirebaseRecyclerAdapter<ChatObject?, ChatVoiceViewHolders?>(
            ChatObject::class.java,
            R.layout.item_messages_video_call,
            ChatVoiceViewHolders::class.java,
            dbMessagingMy
    ) 

但我的 Koltin 代码抛出错误:

Type mismatch.
Required:
FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders>?
Found:

以下函数都不能使用提供的参数调用。

(Class!, Int, Class!, FirebaseArray!) 其中 T = ChatObject?,VH = ChatVoiceViewHolders?为了 构造函数 FirebaseRecyclerAdapter(modelClass: Class!, modelLayout: Int, viewHolderClass: Class!, snapshots: FirebaseArray!) 在 com.firebase.ui.database.FirebaseRecyclerAdapter 中定义

(Class!, Int, Class!, Query!) 其中 T = ChatObject?,VH = ChatVoiceViewHolders?为了 com.firebase.ui 中定义的构造函数 FirebaseRecyclerAdapter(modelClass: Class!, modelLayout: Int, viewHolderClass: Class!, ref: Query!) .database.FirebaseRecyclerAdapter

还有一点,在我的 Java 代码中,我正在使用 AppcompatActivity,而在我的 Kotlin 代码中,我正在使用 BaseActivity..

我做错了什么吗? 我该如何解决?

谢谢。

【问题讨论】:

【参考方案1】:

您已将变量声明为FirebaseRecyclerAdapter&lt;ChatObject, ChatVoiceViewHolders&gt;,但随后您尝试为其设置值FirebaseRecyclerAdapter&lt;ChatObject?, ChatVoiceViewHolders?&gt;

所以改变

object : FirebaseRecyclerAdapter<ChatObject?, ChatVoiceViewHolders?> 

到这里

object : FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders> 

这给你一个错误的原因是因为 Kotlin 对可空性规则更加严格。 Java 并不太关心它。您是说我声明了一个只能具有非空值的变量,但之后您尝试为其分配一个可以具有空值的值。

【讨论】:

以上是关于类型不匹配。必需:FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders>?成立:的主要内容,如果未能解决你的问题,请参考以下文章

类型不匹配。必需:FirebaseRecyclerAdapter<ChatObject, ChatVoiceViewHolders>?成立:

在片段中创建自定义列表视图时出错。必需的活动,找到的片段

不兼容的类型。必需:短,找到:int [重复]

为啥此错误显示“不兼容的类型”。 “必需:android.support.v4.app.Fragment”?

没有路由匹配缺少必需的键:[:id]。破坏

类型错误:initialize() 缺少 1 个必需的位置参数:'url'