我有一个类,我想用 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);
我记下了需要处理的异常,但省略了异常处理细节,因为它使代码变得困惑并且根据您的具体上下文而变化 - 做最适合您情况的事情。
关于java - 使用反射从对象获取数组列表大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36374243/