网上搜集的信息表示,通过java反射机制,可以控制类自身的属性和方法等。但是我在开发项目中看到一段代码,是要修改一个类的属性值。这个类如下:public class ConfigInDB {
public static int MinSrcCount = 2;
public static int DBPoolSize = 10;
public static int CdnDBPoolSize = 2;
public static int EditorDBPoolSize = 1;
public static int ToodouDBPoolSize = 1;
}
另一个类有一个方法用到了反射机制去修改ConfigInDB这个类的属性值:private boolean SetValue(List<StringPair> list) {
Class<ConfigInDB> c = ConfigInDB.class;
Field f;
String s;
int i;
f = c.getField(pair.key);
s = f.getType().getName();
if (s.compareTo("int") == 0) {
try {
i = Integer.parseInt(pair.value);
} catch (Exception ex) {
log.error("bad value of " + s, ex);
continue;
}
if (f.getInt(c) != i) {
f.setInt(c, i);
}
。
}我的问题是为什么不直接对这个类型的属性进行赋值,而是弄这么麻烦去用反射机制去修改:private boolean SetValue(List<StringPair> list) {
ConfigInDB.MinSrcCount = 20;
.....
}
上面不也是修改该了这个类的属性值吗?
public static int MinSrcCount = 2;
public static int DBPoolSize = 10;
public static int CdnDBPoolSize = 2;
public static int EditorDBPoolSize = 1;
public static int ToodouDBPoolSize = 1;
}
另一个类有一个方法用到了反射机制去修改ConfigInDB这个类的属性值:private boolean SetValue(List<StringPair> list) {
Class<ConfigInDB> c = ConfigInDB.class;
Field f;
String s;
int i;
f = c.getField(pair.key);
s = f.getType().getName();
if (s.compareTo("int") == 0) {
try {
i = Integer.parseInt(pair.value);
} catch (Exception ex) {
log.error("bad value of " + s, ex);
continue;
}
if (f.getInt(c) != i) {
f.setInt(c, i);
}
。
}我的问题是为什么不直接对这个类型的属性进行赋值,而是弄这么麻烦去用反射机制去修改:private boolean SetValue(List<StringPair> list) {
ConfigInDB.MinSrcCount = 20;
.....
}
上面不也是修改该了这个类的属性值吗?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货