java 利用反射对一个对象所有属性赋值

无伤 2014-09-04 01:52:01
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
...全文
485 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
百里马 2014-09-04
  • 打赏
  • 举报
回复
若是基本数据类型或是包装类的话,也不过这么几种,if-else判断一下就可以吧
whos2002110 2014-09-04
  • 打赏
  • 举报
回复
建议用内省来做。 不过这个属性类型的判断是不可避免的
zhjdg 2014-09-04
  • 打赏
  • 举报
回复
自己先处理
final Method m = methods[i];
            final String name = m.getName();
            Class returnType = m.getReturnType();
            Class[] args = m.getParameterTypes();
可看ant的org.apache.tools.ant.IntrospectionHelper

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧