[英]Null check in if conditions
我在Java中有此代碼
return mFingerprintManager.hasEnrolledFingerprints() &&
createKey(DEFAULT_KEY_NAME, true) &&
initCipher(mCipher, DEFAULT_KEY_NAME);
我已將其轉換為Kotlin,如下所示
return mFingerprintManager.hasEnrolledFingerprints() &&
createKey(DEFAULT_KEY_NAME, true) &&
if (mCipher != null) {
mCipher?.apply { initCipher(this, DEFAULT_KEY_NAME) }
return true
} else {
return false
}
有沒有更好的方式編寫Kotlin代碼,這樣更簡潔? 變量mCipher定義為
private var mCipher: Cipher? = null
在課堂上。
?.
如果接收器不為null,則在可為null的接收器上返回函數的結果,否則為null。
將此與.apply
結合在一起,我們可以編寫:
[..] && mCipher?.apply { initCipher(this, DEFAULT_KEY_NAME) } != null
等一下,為什么不能將Java代碼復制粘貼到Kotlin? 它將按原樣工作:
return mFingerprintManager.hasEnrolledFingerprints()
&& createKey(DEFAULT_KEY_NAME, true)
&& initCipher(mCipher, DEFAULT_KEY_NAME)
如果initCipher(...)
可以將null
作為其參數進行處理,則無需在將其傳遞給方法之前檢查mCipher
。
更新:
似乎您已經將initCipher
從Java轉換為Kotlin,現在它不能接受null
作為其參數了。 然后,假設您沒有對mCipher
的並發訪問mCipher
,請添加一個null斷言!!
代碼:
return mFingerprintManager.hasEnrolledFingerprints()
&& createKey(DEFAULT_KEY_NAME, true)
&& initCipher(mCipher!!, DEFAULT_KEY_NAME)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.