[急]如何绕过类的setXXX方法利用反射为其类变量两复制

tim90 2009-06-24 05:53:06
这个类是第三方的,里面定义了100个类变量a ,b ,c ,d ...,却没有为他们定义setXXX()方法来赋值

这些变量是public的,
请问可以用反射或别的方法为他们赋值吗?

我实在不想用如下的方式为它赋值了
a = value
b = value
c = value
d = value

我希望先得到所有变量Field[] fields = full.getClass().getDeclaredFields();
然后用个循环对他们批量赋值,

谢谢
...全文
58 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tim90 2009-06-25
  • 打赏
  • 举报
回复
谢谢4 5 6 楼的强力人士
sui_yuan_zhe 2009-06-24
  • 打赏
  • 举报
回复
顶吧·····
myairland 2009-06-24
  • 打赏
  • 举报
回复
你的value都是一样的么?是一样或者有规律的话,具体看一下api,肯定是可以的.

但如果没有规律的话还不是要一个一个写?

而且我感觉在这种情况下,仅仅为了节省代码而用反射是不恰当的
coolboybest 2009-06-24
  • 打赏
  • 举报
回复
可以先把 value 写在 集合 里
然后 在 用循环 用 Field的set(obj,value);
yuxinglian 2009-06-24
  • 打赏
  • 举报
回复

public Object uniqueResult (final Class cls) throws InstantiationException, IllegalAccessException, IllegalArgumentException, {

// 根据类对象信息生成实体
Object obj = cls.newInstance();

// 获得类对象中的字段
Field[] fields = cls.getDeclaredFields();

// 设置为可访问
AccessibleObject.setAccessible(fields, true);

// 循环给字段设置value
for (int i=0; i<fields.length; i++) {

// 得到一个字段
Field field = fields[i];

// 不是常量, 并且不是静态的字段
if ( Modifier.isStatic(field.getModifiers())==false && Modifier.isFinal(field.getModifiers())==false ) {

// 得到字段类型
String fieldType = field.getType().toString();

// 字段的值
Object columnValue = 某某某;

// 如果字段的值为空,继续下一次循环
if (columnValue == null){ continue; }

// 如果声明是 String 类型
if (Pattern.matches("^(.*)(String){1}", fieldType)){

field.set(obj, columnValue.toString());

// 如果声明是 Timestamp 类型
} else if (Pattern.matches("^(.*)(Timestamp){1}", fieldType)) {

field.set(obj, Timestamp.valueOf(columnValue.toString()));

// 如果声明是 int 类型
} else if (Pattern.matches("^(.*)(int){1}", fieldType)) {

field.setInt(obj, new Integer(columnValue.toString()).intValue());

// 如果声明是 Integer 类型
} else if (Pattern.matches("^(.*)(Integer){1}", fieldType)){

field.set(obj, new Integer(columnValue.toString()));
}
}
}

return obj;
}
rumlee 2009-06-24
  • 打赏
  • 举报
回复

try{
Test test = new Test();
Field field = Test.class.getDeclaredField("a");
//如果不是public的就需要调用以下代码才可以,如果是public的可以不需要
//field.setAccessible(true);
field.set(test, "1");
}catch(Exception e){}
bolink5 2009-06-24
  • 打赏
  • 举报
回复
你可以在构造函数中为他们赋值啊,不过LZ的变量太多就不方便了。
反射肯定可以啊,但反射也有缺点,出了错误编译器是没有办法的,一定要在运行时才能发现。
反射具体怎么用你可以查下api啊
zhuzhusany 2009-06-24
  • 打赏
  • 举报
回复
可以用Field的set(obj,value);试试
fosjos 2009-06-24
  • 打赏
  • 举报
回复
反射当然可以,参考api帮助,或者搜一下

62,614

社区成员

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

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