0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【読書記録】Kotlinイン・アクション -第9章-

Posted at

書籍「Kotlinイン・アクション」を読んで個人的に疑問に思った点や調べたことについて記載する読書記録です。
書籍の内容については記載しません。

第9章の内容

第9章 ジェネリクス
https://book.mynavi.jp/ec/products/detail/id=78137

ジェネリクスの注意点

  • ジェネリッククラスの型パラメータTは通常Any?型でnull許容型であることに注意
  • null非許容型にするためには上限限界を指定する必要がある
class Hoge<T : Any>{
    ・・・
}

不変

不変の説明が理解しづらかったので、整理。

2つの異なる型A,Bについて、MutableList<A>がMutableList<B>のサブタイプ、スーパータイプではない場合にMutableListは型パラメータについて不変である。

MutableList<Int>はMutableList<Any>としては使えないことを不変という。

IntはAnyのサブタイプだが、MutableListはMutableListのサブタイプではないというのがポイント。

不変の逆が共変。

ListはListとして使えるため共変。

ジェネリクスを共変にする

ジェネリクスの中で型引数のスーパータイプ、サブタイプの関係を維持するにはoutキーワードを明示的に指定して共変にする必要がある。

outキーワード

outキーワードを指定した型パラメータTは戻り値としてしか使えないよう制限できる。これによって、共変の安全性を保証することができる。

反変

型パラメータのサブタイプの関係と逆になることを反変という。

HogeがHogeのサブタイプの場合、IntはNumberのサブタイプであるという関係と逆になっているため、反変という。

inキーワードを使った場合には反変する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?