我想写一个通用的,根据bean的字段就能对两个bean进行排序,这样就可以用到arraylist的排序中去
public int compare(Object a , Object b , String field){
int ret = 0;
try {
Class classA = a.getClass();
Object objA = classA.newInstance();
Field fieldNameA = classA.getDeclaredField(field);
PropertyDescriptor pdA = new PropertyDescriptor(fieldNameA.getName(), classA);
Method methodA = pdA.getReadMethod();
String resultA = methodA.invoke(objA).toString();
Class classB = b.getClass();
Object objB = classB.newInstance();
Field fieldNameB = classB.getDeclaredField(field);
PropertyDescriptor pdB = new PropertyDescriptor(fieldNameB.getName(), classB);
Method methodB = pdB.getReadMethod();
String resultB = methodB.invoke(objB).toString();
ret = resultA.compareTo(resultB);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IntrospectionException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
return ret;
}
但现在执行到invoke的时候就会报错,我用debug查找的时候说是method为空,求大神指教
我的目标是对所有bean都适用,这里就不贴bean的代码了
------解决方案--------------------
楼主的Object a和Object b已经是两个对象了,为何在方法中还要用classA和classB在重新new出classA和classB的对象,你重新new出来的objA和objB里面的所有属性应该都是null的,也就是你methodA.invoke(objA)这里取出objA的属性是null,你后面又掉用toString(),自然就报NullPointerException