我正在将Java Android项目转换为Kotlin。
我使用的是API.AI的客户,它有两个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.的...which
ai.api.AIConfiguration.SupportedLanguages.English的引用,它编译成功。import ai.api.AIConfiguration as SuperAIConfiguration导入超类并使用SuperAIConfiguration.SupportedLanguages,但我更愿意在子类上直接引用枚举。我不明白:,为什么这个引用在Java中有效,而在Kotlin中无效?
发布于 2018-09-03 08:06:52
Kotlin中的可见性规则与Java中的不同。Kotlin类不会从超级类型“继承”静态嵌套类,因为当伴生对象发挥作用时,规则变得过于复杂。我们试图保持规则尽可能简单,通常通过超级类型名称访问嵌套类没有问题,但在您的示例中,子类和超类的短名称会发生冲突。这不是典型的,所以您有问题中列出的选项:完全限定的名称或导入时的重命名。
https://stackoverflow.com/questions/45880003
复制相似问题