はじめに 当たり前な話 ジェネリック型の継承関係 共変(covariant)の問題点 共変(covariant) が妥当なケース 反変 (contravariant) の問題点 反変 (contravariant) が妥当なケース ここまでのまとめ ジェネリクスが不変だと、、 ジェネリクスに共変性を持たせる ジェネリクスに反変性を持たせる 境界ワイルドカード型のまとめ ジェネリック型のキャスト 境界型パラメータ 配列は共変 ジェネリクスの 不変・共変・反変 といった話は、なんとなく分かった気になって流してしまう方が多いのではないでしょうか? Java に限った話ではないですが、実際、ジェネリクスが絡んだタイプセーフ性の話題は混乱しやすく、理解しにくいものだと思います。 ここでは Java を題材に ジェネリクスの 不変・共変・反変 について、なるべく分かりやすく説明してみたいと思います。
![Java におけるタイプセーフとジェネリクスの微妙な関係 - A Memorandum](https://cdn-ak-scissors.b.st-hatena.com/image/square/cb4c639825d53b3b1ffe346242c778fd54d24f08/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2FN%2FNaotsugu%2F20171111%2F20171111015920.png)