Kotlin Foo:: class.java Ошибка неразрешенной ссылки: Java

Я пытаюсь конвертировать мой Java-код HomePage.class в Kotlin. Я следую инструкциям на Kotlin.org:

GetClass()

Чтобы получить информацию о типе из объекта, мы используем свойство расширения javaClass.

val fooclass= foo.javaClass

Вместо Foo.class используйте Foo::class.java.

val fooclass= Foo::class.java

У меня есть класс под названием HomePage, который расширяет AppCompatActivity (в Android). Я использую Android Studio. Я попытался сделать HomePage::class.java и у него есть ошибка: Unresolved reference: java

enter image description here

Как мне заставить это работать?

Ответ 1

Скорее всего, проблема в том, что вы забыли зависеть от библиотек отражений, которые были необходимы для отражающих функций Kotlin.

На платформе Java компонент среды выполнения, необходимый для использования функций отражения, распространяется в виде отдельного файла JAR (kotlin-refle.jar). Это сделано для уменьшения необходимого размера библиотеки времени выполнения для приложений, которые не используют функции отражения. Если вы используете отражение, убедитесь, что файл .jar добавлен в путь к классам вашего проекта.

Источник

Ответ 2

Оказывается, я использовал более старую версию Kotlin, и она не была настроена правильно. Я редактировал файл gradle для включения последней бета-версии и выбрал параметр, который настраивает Kotlin, и теперь он работает.

В gradle:

buildscript {
    ext.kotlin_version = '1.0.0-beta-3594'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
    }
}
...

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

Ответ 3

Я положил в начале Gradle (модуль приложения)

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

а также

implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"

или же

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

в разделе зависимостей

В build.gradle (проект)

buildscript {
    ext.kotlin_version = '1.2.0'
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

Ответ 4

Для облегчения ссылок здесь приведены зависимости отражения при использовании Gradle:

Отразить библиотеки из docs для Gradle в build.gradle

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    compile "org.jetbrains.kotlin:kotlin-reflect"
    testCompile "org.jetbrains.kotlin:kotlin-test"
    testCompile "org.jetbrains.kotlin:kotlin-test-junit"
}

Синтаксис библиотек рефлексии для Kotlin Script Gradle DSL в вашем build.gradle.kts

dependencies {
    compile(kotlin("stdlib"))
    compile(kotlin("reflect"))
    compile(kotlin("test"))
    compile(kotlin("test-junit"))
}

Ответ 5

Я скопировал класс из другого проекта и забыл изменить имя пакета класса. когда я изменил, он исправил

Ответ 6

Я видел это в AndroidStudio с Kotlin 1.2.71, и ничего из вышеперечисленного не исправило это для меня.

Что, к сожалению, весело работало для меня, так это закрытие проекта, указание AndroidStudio забыть о проекте и повторное открытие из папки. Престо, нет неразрешенной ссылки. Странно, я знаю.

Ответ 7

В моем случае исправление уменьшенной версии kotlin

+ Изменить

ext.kotlin_version = '1.3.21'

к

ext.kotlin_version = '1.3.11'

Ответ 8

Добавьте эту строку в ваш модуль сборки сборки

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

В проекте строят gradle:

buildscript {
    ext.kotlin_version = '1.3.21'
    repositories {
        google()
        jcenter()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'
        classpath 'com.google.gms:google-services:4.2.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

Ответ 9

я использовал

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

Вместо

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"