public static void main(String[] args) {
String key = "Age";
Field field;
try {
Class action = Class.forName("cn.Persone");
field = action.getDeclaredField(key);
//field.setAccessible(true);
Object beo = action.newInstance();
Object returnValue = "1";
Class<?> type = field.getType();
Method method = action.getDeclaredMethod("set" + key, type);
method.invoke(beo, returnValue);
System.out.println(beo);
} catch (SecurityException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
如代码所示,希望对某个对象的属性赋值,之前可以给定这个属性的名称,但是赋给这个属性的只能是String类型的,请问反射中有没有统一强转成属性对应类型。
method.invoke(beo, returnValue);这段代码报java.lang.IllegalArgumentException: argument type mismatch异常,
改成:method.invoke(beo,type.cast(returnValue)); 后报“java.lang.ClassCastException
------解决思路----------------------
自己先处理
final Method m = methods[i];
final String name = m.getName();
Class returnType = m.getReturnType();
Class[] args = m.getParameterTypes();
可看ant的org.apache.tools.ant.IntrospectionHelper
------解决思路----------------------
建议用内省来做。 不过这个属性类型的判断是不可避免的
------解决思路----------------------
若是基本数据类型或是包装类的话,也不过这么几种,if-else判断一下就可以吧