Java - чтение объекта из файла свойств - PullRequest
0 голосов
/ 20 января 2012

Я сохраняю файл свойств, используя отражение для циклического обхода полей класса по одному и сохраняя имя и значение поля в файле.

Теперь мне нужно снова создать этот класс и передать егозначения хранятся в файле свойств.Я придумал это.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 ]

1 голос
/ 20 января 2012

Проблема в том, что int - это не класс, например, float, char, short, long, они все примитивы.Чтобы сделать это, вам нужно привести к Integer, затем использовать intValue ();

Integer(myInt).intValue();
0 голосов
/ 20 января 2012

Свойства содержат только значения типа String.Строка не может быть приведена к типу int.

У меня такое ощущение, что ты изобретаешь колесо.Вы можете сериализовать ваш объект в двоичном виде, используя собственную сериализацию Java, или использовать маршаллер XML для сериализации вашего компонента в виде 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"));
}
...