Почему это Java-файл, если я программирую на Kotlin? - PullRequest
0 голосов
/ 05 июня 2019

Я ваш классический программист, который учился на Java для разработчиков приложений и теперь пытается переключиться на Kotlin. Сейчас я просто изучаю учебник , который есть у разработчика Android. На этой странице, хотя я сталкиваюсь с этим.

fun sendMessage(view: View) {
    //What you do in response to click

    val editText = findViewById<EditText>(R.id.editText)
    val message = editText.text.toString()
    val intent = Intent(this, DisplayMessageActivity::class.java).apply {
        putExtra(EXTRA_MESSAGE, message)
    }
    startActivity(intent)
}

В строке 6 код ссылается на файл Java. Это должно быть там для чего-нибудь?

Я знаю, что расширение для файлов Kotlin - .kt, так почему же оно не прикреплено?

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

Чтобы развернуть ответ @ alxgmpr, оператор ::class возвращает KClass, который является ссылкой на класс Kotlin. Концептуально он аналогичен типу Class в Java, но технически отличается, так как должен обеспечивать специфические для Kotlin возможности (например, isSealed, isCompanion).

Итак KClass != Class.

Однако Intent написан на Java и ничего не знает о KClass (но он знает о Class), поэтому вам нужно использовать KClass.java, который возвращает класс Java соответствующий этому конкретному KClass.

Вот пример, который должен прояснить, что (типы явны для дифференциации двух переменных):

val kClass: kotlin.reflect.KClass<String> = String::class
val javaClass: java.lang.Class<String> = kClass.java // equivalent to String::class.java
2 голосов
/ 05 июня 2019

::class.java запрашивает класс Java, так как они могут использоваться внутри файлов Kotlin.Хотя он заканчивается на .java, это всего лишь ссылка на класс Java, а не файл.

См .:

https://kotlinlang.org/docs/reference/reflection.html#class-references

https://kotlinlang.org/docs/reference/java-interop.html#java-reflection

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