境界ワイルドカードを型パラメータとするインスタンスを作る。
次のようなクラスがあって、
class Foo<X> {
Foo( Class<X> cl ) {}
}
任意のクラスを引数として、境界ワイルドカードを型パラメータとするFooを作成したい場合、以下のように書くとコンパイルエラーになります。
Class<?> cl = null; Foo<?> foo = new Foo<?>( cl ); // コンパイルエラー
こういう場合は、以下のようなユーティリティ関数を用意するとうまくかけます。
static <X> Foo<X> foo( Class<X> cl ) { return new Foo<X>( cl ); }
ユーティリティを使って
Foo<?> foo = foo( cl );
と書けてコンパイルエラーにもなりません。