Если я хочу начать новое действие в Android, мне нужно передать действие намерению. Однако вместо того, чтобы просто передать класс Kotlin вот так:
val intent: Intent = Intent(this, SearchActivity::class)
Мне нужно передать класс Kotlin как класс Java следующим образом:
val intent: Intent = Intent(this, SearchActivity::class.java)
Зачем мне нужно добавлять этот дополнительный идентификатор, если мой SearchActivity
является файлом .kt?
Второй параметр конструктора Intent
, который вы используете, принимает объект java.lang.Class
. SearchActivity::class
возвращает kotlin.reflect.KClass
. Вы получите java.lang.Class
оттуда, обратившись к его свойство java
. Следовательно, вы получаете несколько странный синтаксис SearchActivity::class.java
.
По сути, ClassName::class
возвращает реализацию Котлина класса KClass, которая не расширяет класс Java. Вот почему нужен ::class.java
. java
- это средство получения в KClass, которое возвращает версию экземпляра KClass класса Java.
Проверьте Ссылка на KClass.