2017-10-13 18 views
4

私はKotlinを使ってTeamCityとのインターフェースを取ろうとしています。なぜこのKotlin Objectはそれ自身から継承できますか?

プロジェクトをKotlin(.xml)に変換すると、Project.ktというファイルが作成されます。このファイルには、すべての構成を設定できます。無編集鉱山で

は次のようになります。

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

これは、円形の継承のように見えますか?私が省略している輸入品がありますが、確かにそういう大きな違いはありませんか?ファイル内のどこに名前が表示されるかによって、その名前が異なる方法で解釈されますか?シングルトンのための

  • オブジェクト =オブジェクトの宣言:

    私の心は、このようにオブジェクトの署名を解釈しています。

  • プロジェクト(最初のオカレンス)=オブジェクトの名前。
  • =継承マーカー。
  • プロジェクト(2番目のオカレンス)=継承元の基本クラス。
  • () =基本クラスへのコンストラクタの呼び出し。

この循環遺伝はあるのですか、または私はKotlinについて何か大きなものを見逃しましたか?私はherehereを見て、私の答えを見つけることができないようです。

答えて

7

修飾クラスother.Projectmy.Projectとすると、同じ名前で2つの異なるクラスを異なるパッケージに定義することになります。

my.Projectはシングルトンとして定義されているため、これから拡張することはできず、実際の基本クラスはother.Projectです。 コットンは分化するのに十分に賢いです。あなたがクラス宣言で同じことをしようとするなら、あなたは循環的な継承を得るでしょう。

明示的にシングルトンから拡張しようとする可能性もありますが、エラーシングルトンから継承できません。したがって、基本的にこれは適切なクラスをインポートした場合にのみうまく動作します。

+0

これはかなり巧妙なコンパイラです! – ZoSal

関連する問題