为什么这个 Kotlin 对象可以继承自自身?
Why can this Kotlin Object Inherit from itself?
我正在尝试使用 Kotlin 与 TeamCity 交互。
当您将项目转换为 Kotlin(从 .xml)时,您将拥有一个名为 Project.kt 的文件,您可以在其中设置所有配置。
没有编辑我的看起来像这样:
object Project : Project(/* Some Function Literal with Receiver */)
这看起来像循环继承?我忽略了一些进口产品,但这肯定不会有太大的不同吗?是否可以根据名称在文件中出现的位置以不同方式解释该名称?
我的想法是这样解释对象签名:
- object = 单例的对象声明。
- 项目(第一次出现)= 对象名称。
- : = 继承标记。
- 项目(第二次出现)= 要继承的基础 class。
- () = 构造函数调用基础 class.
假设合格的 classes other.Project
和 my.Project
,你会在不同的包中用相同的名称定义两个不同的 classes。
由于 my.Project
被定义为 Singleton,您不能从它扩展,实际基础 class 是 other.Project
。 Kotlin 足以区分。如果您尝试对 class 声明执行相同的操作,您将获得循环继承。
您甚至可以尝试显式地从 Singleton 中强制扩展,但是您将遇到错误 无法从 Singleton 继承。所以基本上这只有在您导入正确的 classes.
时才有效
我正在尝试使用 Kotlin 与 TeamCity 交互。
当您将项目转换为 Kotlin(从 .xml)时,您将拥有一个名为 Project.kt 的文件,您可以在其中设置所有配置。
没有编辑我的看起来像这样:
object Project : Project(/* Some Function Literal with Receiver */)
这看起来像循环继承?我忽略了一些进口产品,但这肯定不会有太大的不同吗?是否可以根据名称在文件中出现的位置以不同方式解释该名称?
我的想法是这样解释对象签名:
- object = 单例的对象声明。
- 项目(第一次出现)= 对象名称。
- : = 继承标记。
- 项目(第二次出现)= 要继承的基础 class。
- () = 构造函数调用基础 class.
假设合格的 classes other.Project
和 my.Project
,你会在不同的包中用相同的名称定义两个不同的 classes。
由于 my.Project
被定义为 Singleton,您不能从它扩展,实际基础 class 是 other.Project
。 Kotlin 足以区分。如果您尝试对 class 声明执行相同的操作,您将获得循环继承。
您甚至可以尝试显式地从 Singleton 中强制扩展,但是您将遇到错误 无法从 Singleton 继承。所以基本上这只有在您导入正确的 classes.
时才有效