【问题标题】:Kotlin Foo::class.java "Unresolved Reference: Java" errorKotlin Foo::class.java“未解决的参考:Java”错误
【发布时间】: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

如何让它工作?

【问题讨论】:

    标签: kotlin


    【解决方案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并重新安装了最新的(这是唯一的选择)

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2017-08-08
                        • 2021-09-27
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-10-25
                        • 1970-01-01
                        相关资源
                        最近更新 更多