2017-06-25 21 views
0

FileDialogから.class(または多分.javaファイル)のファイルがクラスがジェネリック型であるというようなプログラムを作りたいと思いますLinkedList<T>ArrayList<T>、またはユーザーが選択したデータ構造に依存します。クラスがジェネリック型でない場合は例外をスローしたいと思います。さらに説明については、私は、もし型パラメータがパラメータ化された型であるという制約を実装する方法

inputClassX instanceof ParameterizedType 

をテストしたいと思いますが、私はParameterizedTypeを実装していない可能性がある任意のクラスをテストしたいと思いますので、私はそのテストを行うことはできません。

オブジェクト、またはClassがジェネリック型であるかどうかをテストするにはどうすればよいですか?

任意 Classオブジェクトの場合
+0

私はコンパイルされたクラスが保持していることを信じていますジェネリック型パラメータについての情報はないので、ソースを見ずにランタイムテストを行うことはできません。ここで.classファイルを開く目的は何ですか?それは何らかのプラグインシステム用ですか? –

+0

@ E_net4クラスファイルは、コンパイル時に知られている情報(実行時の保持ではなく、コンパイルオプションによって異なる)を除いて、基本的にすべての情報を保持します。 'new ArrayList ()'のような)クラスインスタンス作成式からの特定のオブジェクトへの型引数は、それ自体が消去されるものです。 – Radiodef

答えて

2

、あなたがgetTypeParametersによって返される配列の長さを確認することができ、それがゼロ以外だ場合、それはクラスがジェネリック型パラメータを有することを意味する:

System.out.println(String.class.getTypeParameters().length != 0); // false 
System.out.println(List.class.getTypeParameters().length != 0); // true 
関連する問題