2017-10-13 82 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