types - Kotlin 类型不匹配!和?

标签 types kotlin mismatch

我最近刚刚开始学习 kotlin,当我将 Webrtc 版本更改为较新的版本(1.0.22920)时遇到以下问题:

 Type mismatch: inferred type is PeerConnection? but PeerConnection was expected

这是发生错误的代码部分:

val rtcConfig = PeerConnection.RTCConfiguration(iceServers)
peerConnection = peerConnectionFactory.createPeerConnection(rtcConfig, getPeerConnectionMediaConstraints(), videoPeerConnectionListener)

这很可能是由于 Webrtc 库中 createPeerConnection 变成了 @Nullable:

@Nullable
      public PeerConnection createPeerConnection(RTCConfiguration rtcConfig, MediaConstraints constraints, Observer observer) {
        long nativeObserver = PeerConnection.createNativePeerConnectionObserver(observer);
        if (nativeObserver == 0L) {
            return null;
        } else {
            long nativePeerConnection = nativeCreatePeerConnection(this.nativeFactory, rtcConfig, constraints, nativeObserver);
            return nativePeerConnection == 0L ? null : new PeerConnection(nativePeerConnection);
        }
    }

尝试放置 ?和 !!在不同的地方不起作用。

我认为只是我对 kotlin 的了解不足使我无法解决问题,你能帮助我吗?

最佳答案

很可能是因为您之前已将变量声明为不可为空:

var peerConnection: PeerConnection

这意味着您无法为该变量分配@Nullable值。 将其更改为:

var peerConnection: PeerConnection?

或者您可以强制返回的值非空(我不推荐),在这种情况下:

peerConnection = peerConnectionFactory.createPeerConnection(rtcConfig, getPeerConnectionMediaConstraints(), videoPeerConnectionListener)!!

注意最后的!!

关于types - Kotlin 类型不匹配!和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50186066/

相关文章:

kotlin - Kotlin 中 eval 关键字的使用

upload - 上传太大的文件时 Laravel token 不匹配

kotlin - 无法导入 Kotlin 多平台通用依赖项

android - 将从图像选择器中选取的图像添加到回收器 View 、Android Studio、Kotlin

带有 x 的 Java 匹配字符串允许不匹配。

android - 无法从 BasicCookieStore 转换为 CookieStore

c++ - 指针:C++ 要求所有声明都有类型说明符

C++ 错误 : "member Engine::x is not a type name"

Scala类型不匹配问题(预期Map,发现scala.collection.mutable.HashMap)

Java 原始类型 : int vs. 整数