gpt4 book ai didi

java - 为什么我不能在 Kotlin 中访问父类(super class)的枚举?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:14 25 4
gpt4 key购买 nike

我正在将 Java Android 项目转换为 Kotlin。

我正在使用 API.AI's client ,它有两个 AIConfiguration 类:

父类(super class)

package ai.api;
public class AIConfiguration implements Cloneable {
public static enum SupportedLanguages {
English("en"),
//...
}
//...
}

子类

package ai.api.android;
public class AIConfiguration extends ai.api.AIConfiguration {
public enum RecognitionEngine {
//...
}

在我的 Java 代码中,我按照 api 指南中的建议创建了子类的实例:

final AIConfiguration config = new AIConfiguration("TOKEN",
AIConfiguration.SupportedLanguages.English,
AIConfiguration.RecognitionEngine.System);

转换为 Kotlin 后,它看起来像这样:

val config = AIConfiguration("TOKEN",
AIConfiguration.SupportedLanguages.English,
AIConfiguration.RecognitionEngine.System)

...这会导致 Unresolved reference: SupportedLanguages

  • 我可以更新对 ai.api.AIConfiguration.SupportedLanguages.English 的引用,它编译成功。
  • 我可以使用 import ai.api.AIConfiguration as SuperAIConfiguration 导入父类(super class)并使用 SuperAIConfiguration.SupportedLanguages,但我宁愿直接在子类上引用枚举。

我不明白:为什么这个引用在 Java 中有效但在 Kotlin 中无效?

最佳答案

Kotlin 中的可见性规则与 Java 中的不同。 Kotlin 类不会从父类(super class)型“继承”静态嵌套类,因为当伴生对象发挥作用时规则会变得太复杂。我们正在努力使规则尽可能简单,通常通过父类(super class)型名称访问嵌套类没有问题,但在您的情况下,子类和父类(super class)的短名称会发生​​冲突。这不是典型的,因此您有问题中列出的选项:完全限定名称或导入时重命名。

关于java - 为什么我不能在 Kotlin 中访问父类(super class)的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45880003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com