首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Kotlin中嵌套对象声明的不一致可访问性

Kotlin中嵌套对象声明的不一致可访问性
EN

Stack Overflow用户
提问于 2019-08-23 18:09:08
回答 1查看 88关注 0票数 1

考虑以下Kotlin代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object Domain {
  val name = "local"
  val location = object {
     val city = "Pittsburgh"
     val state = "Pennsylvania"
  }
}

虽然此定义有效并可编译,但以下代码行失败:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
val x = Domain.location.city // Error:(30, 27) Kotlin: Unresolved reference: city

但是,如果我们重写上述定义,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
object City {
    val city = "Pittsburgh"
    val state = "Pennsylvania"
}
object Domain {
    val name = "local"
    val location = City
}

val x = Domain.location.city    // works fine

我的问题是:根据语言规范,这真的是正确的行为吗?这看起来并不明智,也不一致。它使得声明复杂的单例对象声明变得不方便,而不是将每个子对象分解为一个顶级声明。当使用此语法时,编译器似乎正在创建匿名类型,然而,当定义在嵌套上下文中时,赋值的类型始终为object。这几乎看起来像是编译器中的类型推断错误。我遗漏了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-08-23 19:36:27

创建匿名对象所做的就是创建一个类来扩展任何。由于除了超类(在本例中为Any)之外不能给出任何类型信息,因此所有未在该超类中声明的字段都将不可见。

通过创建您的命名对象栏,将生成类Bar,以及对字段的引用,这就是它们在这种情况下可见的原因。

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

https://stackoverflow.com/questions/57631164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文