如果条件,则检查无效

时间:2016-12-28 19:54:51

标签: java android kotlin

我在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

在班级。

2 个答案:

答案 0 :(得分:3)

如果接收者不为空,则可空接收器上的

?.返回函数的结果,否则返回null。

将此与.apply结合起来我们可以写:

[..] && mCipher?.apply { initCipher(this, DEFAULT_KEY_NAME) } != null

答案 1 :(得分:0)

等等,为什么不能将Java代码复制粘贴到Kotlin?它将按原样运行:

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

如果initCipher(...)可以将null作为参数处理,那么在将mCipher传递给方法之前,您无需先检查initCipher

<强>更新

您似乎已将null从Java转换为Kotlin,现在它无法接受mCipher作为其参数。然后,假设您没有!!的并发访问权限,请在代码中添加null-assertion return mFingerprintManager.hasEnrolledFingerprints() && createKey(DEFAULT_KEY_NAME, true) && initCipher(mCipher!!, DEFAULT_KEY_NAME)

Microsoft.AspNet.OData (6.0.0)