さまざまなクラスを通過し、フィールドを再帰的に取得するユーティリティメソッドがあります。そのフィールドがコレクションかどうかを確認したいと思います。ここにいくつかのサンプルコードがあります:
void myMethod(Class<?> classToCheck)
Field[] fields = classToCheck.getDeclaredFields();
for(Field field:fields)
{
// check if field if a Collection<?>
}
助けてくれてありがとう。
if (Collection.class.isAssignableFrom(field.getType())) {
}
Class.isAssignableFrom
を使用してください:
if (Collection.class.isAssignableFrom(field.getType())
...
getType()
メソッドを使用する
Field field = ...;
if ( Collection.class.isAssignableFrom( field.getType() ) ){
//do something with your collection
}
//これは
List<String> cashType = split(" ,AlL ");
if(cashType instanceof Collection){
System.out.println("cashType instanceof Collection");
}else{
System.out.println("cashType is not instanceof Collection");
}
//これは他を実行します
List<String> cashType = split(" ,AlL ");
if(cashType instanceof Hashtable){
System.out.println("cashType instanceof Collection");
}else{
System.out.println("cashType is not instanceof Collection");
}
for(Field field:fields) { // check if field if a Collection
Object myInstance = field.get(classInstance);
// where classInstance is the instance in which the fields is stored
if(myInstance instanceof Collection) {
//Do your thing
}
}
これは、(オブジェクトクラスインスタンスの)フィールド「フィールド」によって参照される実際のオブジェクトがコレクションを実装するかどうかをテストします。 Fieldの宣言された型がCollectionを実装するかどうかをテストする場合、それは異なります。
次のようにgetType()
を使用できます。
if (field.getType().equals(Collection.class) {
// Do something
}
これは、フィールドがCollection
として宣言されている場合にのみ機能します。フィールドがList
やVector
などのコレクションのサブタイプである場合は機能しません。