sintaxis - kotlin vs java
Kotlin Foo:: class.java Error de "Referencia no resuelta: Java" (7)
Estoy tratando de convertir mi código Java de HomePage.class
a Kotlin. Estoy siguiendo las instrucciones en Kotlin.org :
getClass ()
Para recuperar la información de tipo de un objeto, usamos la propiedad de extensión javaClass.
val fooClass = foo.javaClass
En lugar de
Foo.class
de Java, useFoo::class.java
.
val fooClass = Foo::class.java
Tengo una clase llamada HomePage que extiende AppCompatActivity (en Android). Estoy usando Android Studio. Intenté hacer HomePage::class.java
y tiene un error: Unresolved reference: java
¿Cómo consigo que esto funcione?
Copié la clase de otro proyecto y olvidé cambiar el nombre del paquete de la clase. cuando cambié, lo arreglé
En mi caso la versión reducida de kotlin solucionó el problema.
Cambio
ext.kotlin_version = ''1.3.21''
A
ext.kotlin_version = ''1.3.11''
Es muy probable que el problema se haya olvidado de depender de las bibliotecas de reflexión que se necesitaban para las funciones de reflexión de Kotlin.
En la plataforma Java, el componente de tiempo de ejecución requerido para usar las funciones de reflexión se distribuye como un archivo JAR separado (kotlin-reflect.jar). Esto se hace para reducir el tamaño requerido de la biblioteca de tiempo de ejecución para aplicaciones que no usan funciones de reflexión. Si utiliza la reflexión, asegúrese de que el archivo .jar se agregue a la ruta de clase de su proyecto.
Para una referencia fácil, aquí están las dependencias de reflexión al usar Gradle :
Bibliotecas de reflexión de los docs para Gradle en tu 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"
}
Sintaxis de las bibliotecas de reflexión para Kotlin Script Gradle DSL en su build.gradle.kts
dependencies {
compile(kotlin("stdlib"))
compile(kotlin("reflect"))
compile(kotlin("test"))
compile(kotlin("test-junit"))
}
Pongo en el principio de Gradle (aplicación de módulo)
apply plugin: ''com.android.application''
apply plugin: ''kotlin-android''
apply plugin: ''kotlin-android-extensions''
y
implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
en la sección de dependencias
En el build.gradle (Proyecto)
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
}
}
Resulta que estaba usando una versión anterior de Kotlin y no estaba configurada correctamente. Edité el archivo de gradle para incluir la última versión beta, y seleccioné la opción que configura Kotlin, y ahora funciona.
En 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"
}
Vi esto en AndroidStudio con Kotlin 1.2.71 y ninguno de los anteriores lo solucionó.
Lo que tristemente funcionó para mí fue cerrar el proyecto, decirle a AndroidStudio que se olvidara del proyecto y volviera a abrirlo desde la carpeta. Presto, no hay referencia sin resolver. Raro, lo sé.