web-dev-qa-db-ja.com

Java:フィールドのタイプがJava.util.Collectionかどうかを確認する方法

さまざまなクラスを通過し、フィールドを再帰的に取得するユーティリティメソッドがあります。そのフィールドがコレクションかどうかを確認したいと思います。ここにいくつかのサンプルコードがあります:

void myMethod(Class<?> classToCheck)

Field[] fields = classToCheck.getDeclaredFields();

for(Field field:fields)
{
   // check if field if a Collection<?>

}

助けてくれてありがとう。

21
if (Collection.class.isAssignableFrom(field.getType())) {

}
73
Bozho

Class.isAssignableFromを使用してください:

if (Collection.class.isAssignableFrom(field.getType())
    ...
7
Kirk Woll

getType() メソッドを使用する

Field field =  ...;
if ( Collection.class.isAssignableFrom( field.getType() ) ){
  //do something with your collection
}
2
Robin

//これは

 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");
 }
1
Suresh Arora
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を実装するかどうかをテストする場合、それは異なります。

0
DJClayworth

次のようにgetType()を使用できます。

if (field.getType().equals(Collection.class) {
    // Do something
}

これは、フィールドがCollectionとして宣言されている場合にのみ機能します。フィールドがListVectorなどのコレクションのサブタイプである場合は機能しません。

0
ampersandre