0

Javaでのリフレクションを使用して、コレクションのサイズ(つまり、Setまたは)をどのように見つけますか?List

以下の例のようなものがあり、リフレクションを使用しているときにコレクションのサイズを見つける方法を考えています。

編集:

Class<?> clazz = node.getClass();
Field [] fields = clazz.getDeclaredFields();

for(Field field : fields) {
    System.out.println("declared fields:   "+ field.getType().getCanonicalName());

    //getting a generic type of a collection
    Type returntype = field.getGenericType();
    if (returntype instanceof ParameterizedType) {
        ParameterizedType type = (ParameterizedType) returntype;
        Type[] typeArguments = type.getActualTypeArguments();
        for(Type typeArgument : typeArguments) {
           Class<?> classType = (Class<?>) typeArgument;
           System.out.println("typeArgClass = " + classType.getCanonicalName());
        }
    }
}
4

3 に答える 3

2

nodeコレクションインスタンスであると仮定します。

int size;
try { 
  size = (Integer) node.getClass().getMethod("size").invoke(node);
} catch (Exception e) {
  e.printStackTrace();
}

ただし、を呼び出すことができるときにリフレクションを介してこれを行うことはあまり意味がありませんnode.size()

于 2012-06-20T21:36:32.810 に答える
0

シナリオは、オブジェクトのフィールドの簡単な要約を提供するジェネリック クラスを実装し、コレクション インスタンスのサイズを吐き出したいだけです。個人的には、同じタイプの 2 つのオブジェクト (o1 と o2) の特定のフィールドを比較するためにこれが必要でした。コレクションのインスタンスが変更されたかどうかを知りたかったのです。

Field f1 = null;

   try {
f1 = o1.getClass().getDeclaredField(field);
   }
...

if (Collection.class.isAssignableFrom(f1.getType())) { // Making sure it is of type Collection
   int v1Size = Collection.class.cast(v1).size();   //  This is what you need
于 2013-07-17T10:17:34.980 に答える
0

リフレクションを使用するとはどういう意味かわかりません。java.util.Collectionインターフェイスを実装するすべてのクラスにsize()は、コレクションのサイズを提供するメソッドがあります。

于 2012-06-20T21:37:55.600 に答える