当前位置: 首页 > 知识库问答 >
问题:

从kotlin引用时,未解析Java文件的不同风格的引用

和季
2023-03-14

这个问题可能已经从所有其他类似的问题中得到了含蓄的回答,但我似乎无法让它起作用。

如果我试图从主源集中的Kotlin文件引用相同的文件,它会抱怨看不到它(“未解析的引用”)。

如果我将相同的文件移动到主源集,它就可以工作了(所以它不是文件本身)。

如果我将Java文件转换为Kotlin,它可以工作(这是我目前的解决方案),但我想知道为什么它不能工作,因为转换并不总是那么容易,它应该可以不进行转换。

根据我的谷歌搜索,它似乎与Gradle中的源代码集有关,但我不想在Java文件夹旁边有一个单独的Kotlin文件夹,所以我不确定我是否需要这个。另外,我同时使用Java和Kotlin的另一个项目没有这种配置,并且工作得很好。

我将productFlavors与flavorDimensions一起使用,并且有一个名为“Dimension1Dimension2”的源代码集(这就是我试图引用的Java文件所在的位置)。

看看下面的设置,我可能做错了什么或遗漏了什么?这个项目主要是Java,所以我只是开始添加Kotlin到它。我看不出与我的其他项目有什么不同,主要是Kotlin和一些Java。

另一件奇怪的事情是,它确实适用于三种口味中的一种。有两种类型的维1和三种类型的维2。只有dimension2类型中的一个可以工作。

也许代码更清晰:

flavorDimensions "product", "mode"    
productFlavors {
        mock { // only this one works (e.g. <company_name>Mock is the source set)
            applicationIdSuffix = ".mock"
            dimension "mode"
        }
        dev {
            applicationIdSuffix = ".dev"
            dimension "mode"
        }
        prod {
            dimension "mode"
        }
        demo {
            applicationIdSuffix = ".demo"
            dimension "product"
            buildConfigField "String", "UPDATE_DIRECTORY", "\"/release/\""
            buildConfigField "boolean", "SHOW_STREAM_STATUS", "false"
        }
        <company_name> {
            applicationIdSuffix = ".<company_name>"
            dimension "product"
        }
    }
    null
    null
    null

共有1个答案

吴浩皛
2023-03-14

所以我也遇到了同样的问题,我不能马上把所有的东西都改成Kotlin,因为我们的应用程序是一个生产应用程序,我们没有时间马上改成Kotlin--至少现在遗留代码应该保持Java。

我向Google报告了一个bug:https://issueTracker.Google.com/issues/110100405

你看,一个谷歌工程师竟然很快地回答了我的错误报告:-)

这与Kotlin不起作用的原因是因为您的包设置错误。我敢打赌,在您的某些风格中,您犯了与我相同的错误,创建了com.example.myPackage目录,而不是创建名为com的父目录和名为example的子目录,以及名为myPackage的子子目录。

因此,如果您的文件夹看起来像com.example.myPackage,将它们更改为com,并带有子目录,那么一切都会好起来。

另一个可能是最简单的解决方案是创建名称为com.example.myPackage的不同风格的包,但只有当您选择了要为其创建包的风格时才能这样做。

至于为什么,这不会给Java带来问题,我不知道,谷歌的人也没有,但这可能是IntelliJ的问题,除非他们已经意识到了,否则我会向JetBrains报告。

Kotlin编译器只是吐出一个模糊的错误,说unresolved reference,这也是一个大问题,但这是另一天的谈话,也是另一个bug报告或增强。

 类似资料:
  • 我试图使用新的相机硬件API(android.hardware.camera2)的示例代码为我的Android应用程序。首先,我通过Android Studio的静态编程语言插件的自动转换功能将Java代码转换为静态编程语言代码。下面是一段转换后的代码: 我得到了未解决的引用错误: 但是这些常数在原始Java代码中是可以识别的。这些错误有什么解决办法吗?

  • 我一直得到错误"未解决的引用:绑定"。有人知道我错过了什么吗?我已经试着更新了一切。但是绑定不起作用。 建筑格拉德尔。(module.app):

  • 这一行: 给我错误。 我的项目创建过程非常基本:在Intellij idea中:

  • 我有如下java代码: 我使用Android Studio选项“转换为Kotlin”对其进行了转换 下面是它的外观: IDE现在在这里强调了'add'方法: 它说: 未解决的引用:添加 我怎样才能解决这个问题? 更新: 这是我的转换函数: 示例用法:

  • 当我尝试构建时,ide抛出错误:“未解析的引用:X” X是(公共)类Java上的任何Java常量(公共静态final) 无法使用: 我尝试过: 这是一个混合项目,Java 我可以使用静态方法,例如: 错误行: 我正在使用: Gradle配置 软件 堆栈跟踪: