2017-06-30 18 views
0

はちょうどあなたがコンストラクタとものを持つことができますKotlin、で開始しています。質問は簡単に聞こえるかもしれませんが、私は答えを見つけることができませんでした。ドキュメント の "コンストラクタ"のセクションを読んでいます。なぜKotlinのコンストラクタ:プライマリおよびセカンダリ

基本的には、プライマリとセカンダリの背後にあるアイデアを理解しようとしています。そして、彼らがどのように使用されているかの違いは何ですか(そうでないように見えます、なぜ分離です)?

+2

主な相違点は、すべての二次コンストラクタが最終的に一次コンストラクタに委譲する必要があることです。 –

+0

@OliverCharlesworthありがとう!それは私が最初からそれを得なかった理由を理解できないように、とても論理的で簡単です。 – khusrav

答えて

3

ザ・は明らかに、様々な構文の違いです。しかし、概念上の大きな違いは、すべての二次コンストラクタが最終的に一次コンストラクタに委譲されることです。

方法Iこれは、プライマリコンストラクタがオブジェクトを作成するための標準インタフェースであり、セカンダリコンストラクタがこのインタフェースに準拠するように他の引数セットを変換する静的ヘルパーのようなものだと考えます。 *


*どのような方法で公式ドキュメントにバックアップされていない、これは個人的な解釈であることに注意してください!

+0

私はあなたの「個人的解釈」に同意する傾向があります。他のすべての違いは、一次/二次差別化を必要としていないようです。 – khusrav

0

あなたはコンパクトコード書くためkotlin主コンストラクタのヘルプ:あなたドン場合

data class Data(val value:String) 
    • あなたは例えば、身体せずにクラスを書くことができます:data class、たとえばコンストラクタにアノテーションがない場合は、キーワードconstructorを省略できます。負例:

      class Foo @Annotation constructor() 
      
    • それは例えば、単純に継承します

      open class Bar(val value: String); 
      
      class Primary(value: String, other: String) : Bar(value) 
      
      class Secondary : Bar { 
          constructor(value: String, other: String) : super(value) 
      } 
      
    • それがキーワードbyによる委任を使用することができますが、セカンダリコンストラクタが使用することはできません。

      interface Rule { 
          fun apply(value: String): Int 
      } 
      
      
      open class Policy(rule: Rule) : Rule by rule; 
      
  • 関連する問題