Нулевая проверка, если условия

У меня этот код в Java

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

который я перевел в Котлин, как показано здесь

 return mFingerprintManager.hasEnrolledFingerprints() && createKey(DEFAULT_KEY_NAME, true) && if (mCipher != null) { mCipher?.apply { initCipher(this, DEFAULT_KEY_NAME) } return true } else { return false } 

Есть ли лучший способ написать код Котлина, чтобы он был более кратким? Переменная mCipher определяется как

 private var mCipher: Cipher? = 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-assertion !! к коду:

 return mFingerprintManager.hasEnrolledFingerprints() && createKey(DEFAULT_KEY_NAME, true) && initCipher(mCipher!!, DEFAULT_KEY_NAME) 
Intereting Posts
error: не удается найти класс символов для добавления класса kotlin в класс java в android studio 3.0 stable Котлинское отношение реляционного равенства на Int со значениями от -128 до 127 kapt: как получить исходные комментарии? Могу ли я импортировать библиотеку в Kotlin в мой проект андроида (использует java) Как отменить булевское выражение при использовании оператора elvis в котлин? Исправленная строка Kotlin вызывает пустую ошибку Внедрение интерфейса с параметризованной функцией Невозможно создать привязки вида java.lang.NullPointerException Strange java.lang.ClassCastException при использовании вызова Как клонировать или копировать список в kotlin Как сравнить классы и интерфейсы? Как разрушить конструктор в Котлине Как я могу получить случайное число в Котлине? Головная боль наследования котиновских дженериков Какова наиболее вероятная причина исключений, загадочно избегающих блока try-catch в этом случае?