Javaでジェネリックをインスタンス化する方法は何ですか?

Javaのジェネリクスは直接インスタンス化できません。ジェネリクスは型消去のメカニズムです。ジェネリクスを使用すると、コンパイラはコンパイル時にすべてのジェネリクス型をそれらの上限型(またはObject型)に消去します。そのため、実行時にはジェネリクスの具体的な型情報を取得できません。

然而,可以通过一些技巧来绕过这个限制,实现在运行时创建泛型类型的实例。以下是几种常见的方法:

  1. 通配符を使用してインスタンスを作成する:ジェネリック型のインスタンスを作成するには、ワイルドカード?を使用できます。例えば、List<?> list = new ArrayList<>();は、?型のArrayListインスタンスを作成します。
  2. Javaのリフレクション機構を使用してインスタンスを生成する方法:ジェネリック型の具体的な型情報を取得し、対応するインスタンスを生成するためにJavaのリフレクション機構を使用することができます。例えば、Class.newInstance()メソッドを使用してジェネリック型のインスタンスを生成することができます。ただし、このメソッドを使用するには、ジェネリック型がデフォルトの引数なしコンストラクタを持っている必要があります。
  3. インスタンスを作成するために工場方法を使用することができます。ジェネリック型のインスタンスを作成するために、工場方法を定義することができます。例えば、Classオブジェクトをパラメータとして受け取り、リフレクションを使用して対応するインスタンスを作成する静的メソッドを定義することができます。

これらの方法は、コンパイル時にジェネリック型の具体情報を提供する必要があるか、別の方法でジェネリック型の具体情報を取得する必要があります。いくつかの場合、型消去の仕組みにより、ジェネリック型の具体情報が取得できないため、ジェネリック型のインスタンスを直接作成することができません。

bannerAds