我用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的方法