日期:2014-05-20  浏览次数:20710 次

java放射问题
我用java的放射写了一个测试,报错,但是还是有结果输出,代码如下

public class User
{
  private String username;
  private String password;
  Integer value1,value2,value3,value4,value5,value6,value7,value8,value9,value10;
  
  //一下是属性的get/set方法
  .....................
}

public class TestInvoke
{
  public static void main(String[] args)
  {
  public static void main(String[] args)
{
int[] vals = new int[]{1,2,3,4,5,6,7,8,9,10};
User user = Go.setUserValues(vals);
List list = Go.getUserValues(user);

for(int i=0;i<list.size();i++)
{
int j = i + 1;
System.out.println("value" + j + "=" + list.get(i));
}

}

public static User setUserValues(int[] vals)
{
User user = new User();

try
{
Class c = user.getClass();

for(int i=1;i<=10;i++)
{
//动态获取方法名
String methodName = "setvalue" + i;
//设置方法的参数
Class[] args = new Class[1];
Integer u = new Integer(3);
args[0] = u.getClass();
Method method = c.getMethod(methodName, args);
//调用方法
method.invoke(user, vals[i-1]);
}


}catch(Exception ex)
{
ex.printStackTrace();
}
return user;
}

public static List getUserValues(User user)
{
List list = new ArrayList();
 
try
{
Class c = user.getClass();

for(int i = 1;i <= 10;i++)
{
String methodName = "getValue" + i;
Method method = c.getMethod(methodName, null);
Integer s = (Integer)method.invoke(user, null);
list.add(s);

}
}catch(Exception ex)
{
ex.printStackTrace();
}
return list;
 
}

  }
}

报错如下:
  java.lang.NoSuchMethodException: User.setvalue1(java.lang.Integer)
value1=null
value2=null
at java.lang.Class.getMethod(Class.java:1605)
TestInvoke.setUserValues(Go.java:42)
TestInvoke.main(Go.java:15)
value3=null
value4=null
value5=null
value6=null
value7=null
value8=null
value9=null
value10=null


------解决方案--------------------
NoSuchMethodException: User.setvalue1(java.lang.Integer) 这狗明确了吧。。
------解决方案--------------------
貌似是反射,不是放射。
------解决方案--------------------
检查方法名和参数是否正确,看看方法是否是public的,如果不是的话使用getDeclaredMethod或者改为public的方法