空条件检查

我有这个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。

结合这个.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 ,添加一个null断言!! 到代码:

 return mFingerprintManager.hasEnrolledFingerprints() && createKey(DEFAULT_KEY_NAME, true) && initCipher(mCipher!!, DEFAULT_KEY_NAME)