2016-04-02 16 views
1

java.reflection ile analiz etmek istediğim bir sınıfa sahibim. Başka bir nesnenin Arraylist'i olan bir sınıf oluşturdum. ArrayList'e sahip olan sınıfı analiz etmek istediğimde, sınıf yeniden birleştiriliyor ancak Arraylist boyutunu nasıl alacağımı bilmiyorum.Yansıma kullanılarak nesneden gelen aritma boyutu olsun

Kodu ekledim.

public class Department { private ArrayList Students;

public Department() { 
    super(); 
    Students = new ArrayList<>(); 
} 
public Department(ArrayList<Student> students) { 
    super(); 
    Students = students; 
} 
public void addStudent(Student student){ 
    if(student != null){ 
     this.Students.add(student); 
    } 

} 
@Override 
public String toString() { 
    return "Class [Students=" + Students + "]"; 
} 


public static void analyze2(Object obj){ 
    Class c = obj.getClass(); 
    Field[] fieldType= c.getDeclaredFields(); 
    ArrayList<?> ob = new ArrayList<>(); 
    System.out.println(obj.toString()); 

     for(Field field : fieldType){ 
      Class cd = field.getType(); 
      ob = (ArrayList<?>) cd.cast(ob); 
      System.out.println(field.getName()+" "+ field.getType()); 
      System.out.println(ob.size()); 

     } 
    } 

cevap

0

Sen get yöntemi kullanılarak alan değerini almak ve Department nesnenin örneğini geçmeleri gerekiyor. Alan, ArrayList türündeyse, sonucu bir 'ArrayList' dosyasına dökün ve ardından boyutunu yazdırın. Eğer sadece geri ArrayList nesneyi çevrim yapmadan & yansıma yoluyla size yöntemi çağırmak almak istiyorsanız

for(Field field : fieldType){ 
     Class<?> cd = field.getType(); 
     Object fieldVal = field.get(ob); 
     if(fieldVal instanceof ArrayList){ 
     ArrayList<?> arrayListField = (ArrayList<?>)fieldVal; 
     System.out.println(arrayListField.size()); 
     } 
     System.out.println(field.getName()+" "+ field.getType()); 
    } 
+0

Teşekkür ederiz! işe yarıyor –

1

kullanabileceğiniz Method.invoke(): gitmem gereken istisnalar not aldı

ArrayList<String> list = new ArrayList<>(); 
    list.add("A"); 
    list.add("B"); 

    Object obj = list; 
    Class noparams[] = {}; 
    Class cls = obj.getClass(); 

    // note may throw: NoSuchMethodException, SecurityException 
    Method method = cls.getDeclaredMethod("size", noparams); 
    method.setAccessible(true); 

    // note may throw: IllegalAccessException, IllegalArgumentException, InvocationTargetException 
    Object retObj = method.invoke(obj, (Object[]) null); 

    System.out.println(retObj); 

işlenen, ancak özel koşullara bağlı olarak, özel bağlamı göz önünde bulundurmadan, & kodunu değiştirdiğinizde, durumunuza göre en iyi olanı yapın.

Resmi eğitici: method invocation via reflection.