Kotlin Foo :: class.java“未解决的参考:Java”错误

时间:2015-12-07 22:20:50

标签: kotlin

我正在尝试将HomePage.class的Java代码转换为Kotlin。我按照Kotlin.org上的说明进行操作:

  

的getClass()

     

要从对象中检索类型信息,我们使用javaClass   扩展属性。

     

val fooClass = foo.javaClass

     

而不是Java的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

如何让它发挥作用?

11 个答案:

答案 0 :(得分:16)

问题很可能是你忘了依赖Kotlin的反射功能所需的reflection libraries

  

在Java平台上,使用所需的运行时组件   反射功能作为单独的JAR文件分发   (科特林-reflect.jar)。这样做是为了减少所需的尺寸   不使用反射功能的应用程序的运行时库。   如果您使用反射,请确保添加.jar文件   到项目的类路径。

Source

答案 1 :(得分:14)

事实证明,我使用的是较旧版本的Kotlin,但配置不正确。我编辑了gradle文件以包含最新的beta版本,并选择了配置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"
}

答案 2 :(得分:9)

我放入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(Project)

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
    }
}

答案 3 :(得分:1)

为便于参考,以下是使用 Gradle

时的反射依赖关系

build.gradle

中来自docs 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"
}

build.gradle.kts

中Kotlin Script Gradle DSL的反射库语法
dependencies {
    compile(kotlin("stdlib"))
    compile(kotlin("reflect"))
    compile(kotlin("test"))
    compile(kotlin("test-junit"))
}

答案 4 :(得分:0)

我从其他项目复制了该类,忘了更改类包名称。 当我改变时,它修复了

答案 5 :(得分:0)

我在带有Kotlin 1.2.71的AndroidStudio中看到了这一点,但以上内容都没有为我解决。

可悲的是对我来说很有趣的是关闭了该项目,告诉AndroidStudio忘记该项目,然后从文件夹中重新打开。 Presto,没有未解决的参考。很奇怪,我知道。

答案 6 :(得分:0)

就我而言,减少Kotlin的版本已解决了该问题

更改

ext.kotlin_version = '1.3.21'

收件人

ext.kotlin_version = '1.3.11'

答案 7 :(得分:0)

将此行添加到模块构建gradle中

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

在Project build 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
    }
}

答案 8 :(得分:0)

我用过

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

代替

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

答案 9 :(得分:0)

我用这个

实现“ org.jetbrains.kotlin:kotlin-stdlib-jdk8:$ kotlin_version”

无效的缓存并重新启动android studio!可以正常运行!

答案 10 :(得分:0)

我在下载并运行 android studio canary(北极狐)时遇到了这个错误。从那以后,我的 android studio(普通工作室)出现了这个错误,我应用了上面给出的所有解决方案,但没有任何效果。所以我完全卸载了android studio并重新安装了最新的(这是唯一的选择)