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

Posted

技术标签:

【中文标题】Kotlin Foo::class.java“未解决的参考:Java”错误【英文标题】:Kotlin Foo::class.java "Unresolved Reference: Java" error 【发布时间】:2016-03-12 16:40:07 【问题描述】:

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

getClass()

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

val fooClass = foo.javaClass

代替Java的Foo.class使用 Foo::class.java.

val fooClass = Foo::class.java

我有一个名为 HomePage 的类,它扩展了 AppCompatActivity(在 android 中)。我正在使用安卓工作室。我试着做HomePage::class.java,它有一个错误:Unresolved reference: java

如何让它工作?

【问题讨论】:

【参考方案1】:

问题很可能是您忘记依赖 Kotlin 的反射功能所需的 reflection libraries。

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

Source

【讨论】:

【参考方案2】:

事实证明,我使用的是旧版本的 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"

【讨论】:

对我来说不是测试版,而是添加所有依赖项【参考方案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 的反射库,用于您的 build.gradle 中的 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"))

【讨论】:

【参考方案5】:

在 build.gradle (app) 我有:

  implementation 'androidx.core:core-ktx:1.6.0'

我把它替换为

implementation 'androidx.core:core-ktx:1.5.0'

它奏效了! 核心版本还杀死了一些 y 函数,例如:forEach

【讨论】:

现在是1.7.0【参考方案6】:

我用过

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

代替

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

【讨论】:

【参考方案7】:

这发生在我更新 Android Studio 和 Kotlin 插件后,需要迁移到更新版本的 Kotlin。正确配置所有内容后,错误仍然存​​在。删除 .idea 文件夹并重新加载并没有帮助,但老 File -> Invalidate Caches / Restart 对我有用。

【讨论】:

【参考方案8】:

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

【讨论】:

【参考方案9】:

我在带有 Kotlin 1.2.71 的 AndroidStudio 中看到了这个问题,但以上都没有为我解决这个问题。

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

【讨论】:

你是怎么告诉他的?那是Invalidate Cache and restart 吗?还是和别的东西有关? @Elynad 不,虽然我会先尝试Invalidate Cache and Restart。当没有项目打开时,我进入屏幕并单击 ecks (x),它告诉它忘记项目,然后重新打开它。初始设置 shrug【参考方案10】:

在我的情况下,减少 kotlin 的版本解决了这个问题

改变

ext.kotlin_version = '1.3.21'

ext.kotlin_version = '1.3.11'

【讨论】:

【参考方案11】:

在你的 Module build gradle 中添加这一行

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
    

【讨论】:

【参考方案12】:

我用这个

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

缓存无效并重新启动 android studio!工作正常!!

【讨论】:

【参考方案13】:

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

【讨论】:

以上是关于Kotlin Foo::class.java“未解决的参考:Java”错误的主要内容,如果未能解决你的问题,请参考以下文章

可选类型“字符串?”的值未解包错误

未解锁锁定的互斥锁

关于传递指针给函数的未解疑问

南阳理工 55 未解之谜

未解之谜

观《西游记未解之谜 》后记