为什么我不能在 Kotlin 中访问超类的枚举?

Why can't I access a superclass' enum in Kotlin?

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

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

超类

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.

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

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