从属性文件读取Java-Cast对象
我通过使用反射逐个遍历类的字段并将字段的名称和值保存到文件中来保存属性文件 现在我需要再次创建这个类,并将存储在属性文件中的值赋给它。我想到了这个。returnEntity是该类的新实例从属性文件读取Java-Cast对象,java,class,casting,properties,Java,Class,Casting,Properties,我通过使用反射逐个遍历类的字段并将字段的名称和值保存到文件中来保存属性文件 现在我需要再次创建这个类,并将存储在属性文件中的值赋给它。我想到了这个。returnEntity是该类的新实例 for (Field f : returnEntity.getClass().getFields()) { Class fieldType = f.getType(); String fieldName = f.getName();
for (Field f : returnEntity.getClass().getFields())
{
Class fieldType = f.getType();
String fieldName = f.getName();
f.set(returnEntity, fieldType.cast(properties.get(fieldName)));
}
它一直工作到必须将字段强制转换为“Int”类型为止。出于某种原因,它抛出了一个ClassCastException。我做错了什么?属性只包含字符串类型的值。无法将字符串转换为int 我觉得你在重新发明轮子。您可以使用Java本机序列化以二进制形式序列化对象,或者使用XML封送器将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"));
}
问题是int不是一个类,比如float、char、short、long,它们都是原语。要使其工作,您需要强制转换为整数,然后使用intValue()
当我查看类型时,它会显示“int”。我这样做是为了在程序之外修改类。它不需要二进制格式,为什么要使用反射呢?为什么不使用两种方法从属性实例化对象,并从对象写入属性?我不明白你的意思?
Integer(myInt).intValue();