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"