コトリンのジェニーリックと可変性について


きょうへんせい


以前のポスターでは、ジェニーンリックに関する文章に共変性の概念が登場した.これに対して、理解する前に、可変性の概念を理解しなければならない.
まず、コトリンでの可変性を見てみましょう.

へんせい


可変性とは、形式パラメータがクラス階層に影響することを意味します.たとえば、タイプBの値をすべてのタイプAの値が必要なクラスに入れても問題がない場合、BはAのサブタイプです.
たとえば、IntクラスはNumberクラスから継承され、IntのインスタンスをNumberクラス変数に入れることができます.ではIntはNumberのサブタイプです.
val integer: Int = 1
val number: Number = integer 
// integer 가 Number 타입 변수 number에 할당 됨. -> Int는 Number의 하위 자료형

3つの可変タイプ


可変性には、共変性(Covariance)、半変性(Contravariance)、無変性(Invariance)の3種類がある.理解してみましょう.

きょうへんせい


T'がTのサブ資料型であればClassはClassのサブ資料型→生産者の立場のout性質
上記の関係をClass Typeで表すには、Class TypeがClass Typeのサブタイプになります.
これを生産者の立場のout性質と呼ぶ.

はんくうへんせい


T'がTのサブデータ型であれば、ClassはClassのサブデータ型である
これは共変性とは正反対の概念である.int型はNumber型のサブ資料型であることは既に分かっている.Classタイプで表される場合、ClassタイプはClassタイプのサブタイプになります.
これは消費者の立場のInの性質と呼ばれている.

変化なし


CとCは何の関係もありません
名前の通り、ClassとClassは何の関係もありません.
この三つの性質を図で表す

それぞれの特徴を一目で理解してみましょう.ここで矢印は資料型関係を表します.
それぞれの性質を理解した.
通常、JENICを使用する際に注意しなければならないのは、これらのクラス間のコンテキスト関係を理解してもOut Inキーワードを正しく使用できないことです.タイプの組み合わせが間違ってしまいます.
特にJENICを使用する場合、OutとIntキーがない場合は無変性と宣言します.(前バージョンで説明したタイプの不変性)
したがって,開発者が使用するフォーマットのコンテキスト関係を知っていても,OutとInキーワードの使用が適切でない場合,Cottinはタイプ安定性のためにエラーを起こす.
だから適切に使います.