リフレクションを使用した Java でのジェネリック パラメーター タイプの取得
Java では、ジェネリック タイプは、より柔軟で再利用可能なコードを可能にする強力な機能です。ただし、ジェネリック パラメーターの操作は難しい場合があります。よくある課題の 1 つは、実行時にジェネリック パラメーターの実際の型を判断することです。
可能ですか?
はい、ジェネリック パラメーターの型を取得することは可能です。反射を使って。リフレクションは、実行時に Java クラスの構造、フィールド、メソッドの詳細にアクセスして操作する方法を提供します。
例:
次のコード スニペットを考えてみましょう。
public class Voodoo { public static void chill(List<?> aListWithTypeSpiderMan) { // Here I'd like to get the Class-Object 'SpiderMan' Class typeOfTheList = ???; } public static void main(String... args) { chill(new ArrayList<SpiderMan>()); } }
chill メソッドでは、未知の型のリストがあります。実際の型パラメータを決定したいのですが、この場合は SpiderMan になります。
解決策:
解決策には、ParameterizedType インターフェイスの使用が含まれます。ジェネリックスを使用するものなど、パラメーター化された型を記述する型。これを実現する方法は次のとおりです。
Class typeOfTheList = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
このコードは、パラメーター化された型である必要がある現在のクラス (この場合は Voodoo) のスーパークラスを取得し、実際の型引数を抽出します。最初の型引数は、対象の型パラメータである SpiderMan に対応します。
注:
この手法は、Java 16 より前では完全にはサポートされていません。ジェネリック型のリフレクションの使用は、以前はハッキングだと考えられていましたが、Java 16 以降、getActualTypeArguments() が Type インターフェイスに追加され、よりクリーンで合理化された方法を提供します。ジェネリック型情報にアクセスします。
以上がリフレクションを使用して Java で汎用パラメータ型を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。