首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我不能进入科特林的超级课堂?

为什么我不能进入科特林的超级课堂?
EN

Stack Overflow用户
提问于 2017-08-25 11:07:48
回答 1查看 1.2K关注 0票数 5

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

我使用的是API.AI的客户,它有两个AIConfiguration类:

超类

代码语言:javascript
复制
package ai.api;
public class AIConfiguration implements Cloneable {
     public static enum SupportedLanguages {
         English("en"),
         //...
     }
         //...
}

子类

代码语言:javascript
复制
package ai.api.android;
public class AIConfiguration extends ai.api.AIConfiguration {
    public enum RecognitionEngine {
    //...
}

在我的Java代码中,我创建了一个子类实例,正如api指南中所建议的那样:

代码语言:javascript
复制
final AIConfiguration config = new AIConfiguration("TOKEN",
        AIConfiguration.SupportedLanguages.English,
        AIConfiguration.RecognitionEngine.System);

一旦转换为Kotlin,它看起来如下:

代码语言:javascript
复制
val config = AIConfiguration("TOKEN",
        AIConfiguration.SupportedLanguages.English,
        AIConfiguration.RecognitionEngine.System)

导致Unresolved reference: SupportedLanguages.的...which

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-03 08:06:52

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45880003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档