空条件检查
我有这个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)