Java - 从属性文件中读取的Cast对象

时间:2012-01-19 23:07:58

标签: java class casting properties

我正在保存属性文件,方法是使用反射逐个循环遍历类的字段,并将字段的名称和值保存到文件中。

现在我需要再次创建这个类,并为它提供存储在属性文件中的值。我想出了这个。 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。我做错了什么?

2 个答案:

答案 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"));
}