我最近刚刚开始学习 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/