反射调用抛出IllegalArgumentException

时间:2015-10-08 07:08:07

标签: java

我在这里缺少什么?

我得到异常:java.lang.IllegalArgumentException:object不是声明类的实例

public boolean onSave(Object entity,Serializable id,Object[] state, String[] propertyNames, Type[] types) {
    Class<?> clazz=entity.getClass();   
    System.out.println("   Clazzz is:"+clazz);
    Method[] methods = clazz.getMethods();

      for(Method method : methods){
          if(method.getName().startsWith("get") && String.class.equals(method.getReturnType())){
              System.out.println("getter: " + method);

                 try {
                    String s=(String) method.invoke(clazz,(Object[]) null); //java.lang.IllegalArgumentException: object is not an instance of declaring class
                    System.out.println(" value in s is:"+s);
                } catch (IllegalAccessException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
}

1 个答案:

答案 0 :(得分:3)

你需要写

String s=(String) method.invoke(entity, (Object[]) null);

对于静态方法或应该调用该方法的对象,Method.invoke的第一个参数为null。