我正在保存属性文件,方法是使用反射逐个循环遍历类的字段,并将字段的名称和值保存到文件中。
现在我需要再次创建这个类,并为它提供存储在属性文件中的值。我想出了这个。 returnEntity是类的新实例。
for (Field f : returnEntity.getClass().getFields())
{
Class fieldType = f.getType();
String fieldName = f.getName();
f.set(returnEntity, fieldType.cast(properties.get(fieldName)));
}
直到必须将字段强制转换为“Int”类型为止。由于某种原因,它会抛出ClassCastException。我做错了什么?
答案 0 :(得分:1)
问题是int不是类,如float,char,short,long,它们都是原语。要完成这项工作,您需要转换为Integer,然后使用intValue();
Integer(myInt).intValue();
答案 1 :(得分:0)
属性仅包含String类型的值。 String无法转换为int。
我觉得你正在重新发明轮子。您可以使用Java本机序列化以二进制形式序列化对象,或使用XML marshaller将bean序列化为XML。
或者如果你想从/向属性读/写,为什么不简单地提供两种方法,并避免反思:
public toProperties() {
Properties p = new Properties();
p.setProperty("foo", foo);
p.setProperty("bar", Integer.toString(bar);
p.setProperty("zim.blam", zim.getBlam());
}
public static Config fromProperties(Properties p) {
Config c = new Config();
c.foo = p.getProperty("foo");
c.bar = Integer.parseInt(p.getProperty("bar"));
c.zim = new Zim();
c.zim.setBlam(p.getProperty("zim.blam"));
}