【问题标题】:Why can this Kotlin Object Inherit from itself?为什么这个 Kotlin 对象可以继承自自身?
【发布时间】:2017-10-13 14:04:05
【问题描述】:

我正在尝试使用 Kotlin 与 TeamCity 交互。

当您将项目转换为 Kotlin(从 .xml)时,您将拥有一个名为 Project.kt 的文件,您可以在其中设置所有配置。

没有编辑我的看起来像这样:

object Project : Project(/* Some Function Literal with Receiver */)

这看起来像循环继承?我忽略了一些进口,但肯定不会有那么大的不同吗?名称是否可以根据其在文件中出现的位置以不同的方式进行解释?

我的想法是这样解释对象签名:

  • object = 单例的对象声明。
  • 项目(第一次出现)= 对象名称。
  • : = 继承标记。
  • Project(第二次出现)= 要继承的基类。
  • () = 对基类的构造函数调用。

这是循环继承还是我错过了 Kotlin 的一些重要内容?我查看了herehere,似乎找不到我的答案。

【问题讨论】:

    标签: kotlin teamcity


    【解决方案1】:

    假设合格的类 other.Projectmy.Project,您将在不同的包中定义两个具有相同名称的不同类。

    由于my.Project 被定义为单例,您不能从它扩展,实际的基类是other.ProjectKotlin 足够聪明,可以区分。如果你尝试对类声明做同样的事情,你会得到一个循环继承。

    您甚至可以尝试显式地强制从 Singleton 扩展,但随后会出现错误无法从 Singleton 继承。所以基本上这只有在你导入了正确的类时才有效。

    【讨论】:

    • 这是一个相当聪明的编译器!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多