-1

リストがプログラムに実装しているクラスのタイプを把握しようとしています。

JSONデータを取得して、ルートオブジェクトに配置しています。このルートオブジェクトには、JSONデータの各要素を格納するためのリストが含まれています。

たとえば、宣言されたフィールドを持つルートがあります

List<Person> people
List<Location> locations

したがって、私が実行できるようにしたいのは、ルートクラスの各フィールドをループし、現在表示しているリストのクラスのタイプを取得して、そのクラスの特定の関数を呼び出すことです。(特定の関数とは、インターフェイスを実装するクラスタイプを返し、実装する関数を実行してリストを分解できるように、インターフェイスを宣言していることを意味します。

Class<?> clss = fieldObj.getType()(fieldObjはField型です)を呼び出すと、それがリストであることが返されます。このフィールドがどのタイプのリストであるかを取得するにはどうすればよいですか?

4

2 に答える 2

1

実行時にリストに含まれているオブジェクトのタイプを探している場合、Listそれ自体から検索することはできません。これは、実行時にすべてListのがであるという意味の型消去によるものList<Object>です。リスト内のオブジェクトのタイプを判別する必要がある場合は、リスト内の最初の要素を取得して、instanceofまたはassignableFrom

于 2012-08-22T17:02:03.537 に答える
1

Java 1.5以降では、クラスのgetGenericType()メソッドを使用して部分的に実行できます。Field

Field.getGenericType()は、クラスファイルに署名属性が存在する場合はそれを参照します。属性が使用できない場合は、ジェネリックスの導入によって変更されなかったField.getType()にフォールバックします。

こちらの例をご覧ください。コードが何のために印刷するかを見てください

$ java FieldSpy FieldSpy list

> GenericType: java.util.List<java.lang.Integer>

于 2012-08-22T17:35:02.193 に答える