ようやくジェネリクスの使い方がわかった気がする

少しばかり使用する機会に恵まれたので、ジェネリクスの使い方を調べてみた。
下記サイトの解説がとても丁寧でこれ以上書くことは無い気もするが、要点のみメモしておく。

概要

インスタンス・スコープのジェネリクス

宣言例
class クラス名<型フィールド名1, 型フィールド名2, ...> {...}
代入例
new クラス名<型値1, 型値2, ...>();

メソッド・スコープのジェネリクス

宣言例
<型フィールド名1, 型フィールド名2, ...> 戻り値型 メソッド名(引数1, 引数2, ...) {...}
代入例
インスタンス.<型値1, 型値2, ...>メソッド名(引数値1, 引数値2, ...);

補足

  • 境界(型値の制約):
    • 型フィールド名 extends クラス名
    • ? super クラス名
  • ?: 型値のワイルドカード
  • &: 型制約の論理積

例:

public class Hoge<T extends TsParent & java.io.Serializable> {...}
Hoge<? extends Parent> hoge = new Hoge<Children>();