用Java

时间:2019-02-28 17:06:42

标签: java android kotlin

我正在Android Developer网站上关注tutorial。它在Java示例中使用Kotlin。我在堆栈溢出中发现了这个post,这是相当的,但是我不明白答案。

原始代码是:

// 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 :(得分:4)

Kotlin中的

lateinit只是变量的可空性。由于Java没有这种属性,因此您不能将lateinit转换为Java。好吧,您可以强制使用其类型,但是将无法应用@NonNull / @Nullable

Lateinit和Lazy是Kotlin的重要主题,需要深入阅读和深入探讨。 希望您能继续学习。

答案是正确的:只需使用private String lookupKey;,就可以了。

顺便说一句,lateinit仅在字节码中创建一个if条件,如果该条件为null,则会抛出该条件。您在Java中没有lateinit,因此需要手工编写代码。这只是Kotlin与Java相比的另一个不错的功能。

答案 1 :(得分:1)

Kotlin中的lateinit var lookupKey定义了一个没有直接设置值的属性。稍后将值设置为属性。 编译器会小心地添加断言,以确保在未初始化之前无法读取该值。 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