当前位置: 代码迷 >> J2SE >> invoke无法实现,该如何解决
  详细解决方案

invoke无法实现,该如何解决

热度:104   发布时间:2016-04-23 20:37:43.0
invoke无法实现
本帖最后由 abc395015721 于 2014-06-18 16:50:16 编辑
我想写一个通用的,根据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
  相关解决方案