【问题标题】:Java - Cast object read from properties fileJava - 从属性文件中读取的转换对象
【发布时间】:2012-01-19 23:07:58
【问题描述】:

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

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

【问题讨论】:

  • 当我查看类型时,它会显示“int”。

标签: java class casting properties


【解决方案1】:

问题是 int 不是一个类,比如,float,char,short,long,它们都是原语。要完成这项工作,您需要转换为 Integer,然后使用 intValue();

Integer(myInt).intValue();

【讨论】:

    【解决方案2】:

    属性只包含字符串类型的值。无法将 String 转换为 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"));
    }
    

    【讨论】:

    • 我这样做是为了在程序之外修改类。它不需要是二进制格式。
    • 为什么要使用反射呢?为什么不使用两种方法从属性中实例化对象,并从对象中写入属性呢?
    • 我不明白你的意思?
    • 你好@JBNizet 你能从哪里得到这个 Config 类吗? java.io final class ObjectInputFilter.Config ?
    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    相关资源
    最近更新 更多