2017-10-13 79 views
4

我正在尝试使用Kotlin与TeamCity进行交互。这个Kotlin对象为什么从它自身继承?

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

由于没有编辑矿山看起来像这样:

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

这看起来像圆继承?我忽略了一些进口产品,但肯定不会产生很大的差异?根据文件在文件中出现的位置,可以用不同的方式解释名称?

我的脑子里解释对象的签名是这样的:

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

是这个循环继承还是我错过了关于Kotlin的大事?我看了herehere,似乎无法找到我的答案。

回答

7

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

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

你甚至可以尝试强制从Singleton强制扩展,但那么你将有错误不能继承Singleton。所以基本上这只有在你导入了正确的类的时候才会起作用。

+0

这是一个相当聪明的编译器! – ZoSal