java - 使用反射从对象获取数组列表大小

标签 java reflection

我有一个类,我想用 java.reflection 进行分析。 我创建了一个具有其他对象的数组列表的类。 当我想分析具有 ArrayList 的类时,该类被识别,但我不知道如何获取 Arraylist 大小。

我附上了代码。

公开课部{ 私有(private) ArrayList 学生;

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());

      }
    }

最佳答案

如果您只想通过反射获取并调用 size 方法,而不将对象强制转换回 ArrayList,则可以使用 Method.invoke():

    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);

我记下了需要处理的异常,但省略了异常处理细节,因为它使代码变得困惑并且根据您的具体上下文而变化 - 做最适合您情况的事情。

官方教程:method invocation via reflection

关于java - 使用反射从对象获取数组列表大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36374243/

相关文章:

c# - 参数可选时如何获取默认构造函数

java - 找不到带有 Class.forName() 的类,但它存在

c# - 如何在C#中使用反射获取方法的所有属性和属性数据

c# - 在运行时将对象转换为泛型类型

java - 在运行过程中从 Java 项目中提取文件

swing - Switch 语句有问题吗?

Java - 2.0 和 2.00000000000D 之间的实际区别

java - 如何使用枚举避免反射

java - 如何使用 TestNG 多次循环多个类

java - 如何使这部分代码可扩展,