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

问题描述 投票:5回答:1

我正在将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

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

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

java android enums kotlin subclass
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.