Что такое "private lateinit var lookupKey: String" в переводе на Java - PullRequest
0 голосов
/ 28 февраля 2019

Я следую учебнику на сайте разработчиков Android.Он использует Kotlin в примере Java.Я нашел это сообщение о переполнении стека о эквиваленте, но я не понимаю ответы.

Исходный код:

// Defines the selection clause
private static final String SELECTION = Data.LOOKUP_KEY + " = ?";
// Defines the array to hold the search criteria
private String[] selectionArgs = { "" };
/*
 * Defines a variable to contain the selection value. Once you
 * have the Cursor from the Contacts table, and you've selected
 * the desired row, move the row's LOOKUP_KEY value into this
 * variable.
 */
private lateinit var lookupKey: String

Я переписал его следующим образом:

// Defines the selection clause
private static final String SELECTION = ContactsContract.Data.LOOKUP_KEY + " = ?";

// Defines the array to hold the search criteria
private String[] selectionArgs = { "" };
/*
 * Defines a variable to contain the selection value. Once you
 * have the Cursor from the Contacts table, and you've selected
 * the desired row, move the row's LOOKUP_KEY value into this
 * variable.
 */
private String lookupKey; 

Этот ответ слишком прост?Или есть более сложный перевод на Java?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

lateinit var lookupKey в Kotlin определил свойство без значения, установленного напрямую.Значение устанавливается для свойства позже.Компилятор позаботится о том, чтобы добавить утверждения, чтобы убедиться, что невозможно прочитать значение, пока оно не инициализировано.https://kotlinlang.org/docs/reference/properties.html#late-initialized-properties-and-variables

lateinit прекрасно играет с обнуляемостью в Kotlin.Таким образом, вы можете определить ненулевую переменную без значения вместо того, чтобы иметь переменную NULL и проверку на нуль.https://kotlinlang.org/docs/reference/null-safety.html

Версия кода Java не эквивалентна версии Kotlin - она ​​пропускает утверждение проверки и допускает null значения

0 голосов
/ 28 февраля 2019

lateinit в Kotlin - это просто что-то, что играет с переменной NULL.Поскольку у Java нет такого свойства, вы не можете буквально конвертировать lateinit в Java.Ну, вы можете форсировать его тип, но вы не сможете применить @NonNull / @Nullable.

Lateinit и Lazy - это отличные темы о Kotlin, о которых нужно подробно прочитать.Я надеюсь, что вы продолжите изучать их.

Ответ был правильным: просто используйте private String lookupKey; и ... вот и все.

Кстати, lateinit просто создает ifусловие в байт-коде, которое будет выбрасывать, если ноль.У вас нет lateinit в Java, поэтому код нужно было бы создавать вручную.Это еще одна приятная особенность, которая есть у Kotlin над Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...