Types Kotlin类型不匹配!!然后呢?
我最近刚开始学习kotlin,当我将Webrtc版本更改为更新版本(1.0.22920)时,遇到了以下问题:Types Kotlin类型不匹配!!然后呢?,types,kotlin,mismatch,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.
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的了解不够,我才能解决这个问题,你能帮我吗?很可能是因为之前你声明变量不可为null:
var peerConnection: PeerConnection
这意味着您不能将@Nullable
值分配给该变量。
改为:
var peerConnection: PeerConnection?
或者您可以强制返回的值为非null(我不建议这样做),在这种情况下:
peerConnection = peerConnectionFactory.createPeerConnection(rtcConfig, getPeerConnectionMediaConstraints(), videoPeerConnectionListener)!!
注意
代码>结尾。由于该方法可为null,这意味着它有机会返回null。这意味着您不能将其声明为非空PeerConnection
。这里有三种选择:
将变量声明为PeerConnection?
——这意味着您接受可为空的值
将非空断言与一起使用代码>。在调用createPeerConnection
的末尾,添加代码>。如果为null,则会引发异常
在调用createPeerConnection
后,使用Elvis运算符-add?:[如果返回空值而不带括号,则在此处执行操作]
如果您需要PeerConnection为非null,我建议您选择最后一个选项。如果要检查null,建议您选择此选项,如下所示:
var someNullableVar = getPossibleNull()
if(someNullableVar == null) someNullableVar = whatever();
同:
var nonNullVar = getPossibleNull() ?: whatever()
您也可以返回并停止继续执行,但如果您想引发异常,请使用代码>而不是Elvis运算符
如果您选择选项#1,请注意,这意味着您以后必须对呼叫执行空检查。您能显示您指定的对等连接的位置吗?