Заполните значения по умолчанию через отражение в Java - PullRequest
1 голос
/ 15 сентября 2011

У меня сложная иерархия объектов, которая имеет несколько расширений.

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

Например:

class Person {
    String name;
    Color color;
    List<Clothes> clothes;
}

class Child extends Person {
    Sibling sibling;
}

class Foo {
   Person person;
   Child child;
}

Я хотел бы, чтобы библиотека принимала объект в качестве параметра, в данном случае класс Foo, а затем рефлексивно вставляла значения по умолчанию (даже лучше, если я могу определить значения по умолчанию) во все поля. Также все карты, списки, наборы и т. Д. Должны получить новый

Я посмотрел на BeanUtils , но, насколько мне известно, он не поддерживает в точности то, что я ищу.

NB. Это всего лишь примеры, и мои объекты намного сложнее и крупнее. У них много объектов, и у каждого объекта много объектов и так далее. Оба с картами, списками и т. Д.

Может быть, лучше объединить некоторые библиотеки, такие как BeanUtils и Google Guava, и сделать их своими?

Ответы [ 2 ]

3 голосов
/ 15 сентября 2011

Это должно быть довольно просто сделать одним способом, если у вас уже есть структура (в случае, если установка их при сборке более логична)

Если вы заранее знаете значения по умолчанию,почему бы просто не установить их в классе?(т. е. по умолчанию, значения по умолчанию;)

Есть много значений при установке имени по умолчанию для человека (кроме нуля). Можете ли вы привести пример, где вы хотите указать значение по умолчанию динамически?

0 голосов
/ 15 сентября 2011

Лично я бы просто попытался использовать обычные Java-конструкторы, и / или геттеры, и сеттеры и т. Д. Однако из вопроса я предполагаю, что вы хотите что-то, что может работать, не зная точную структуру ваших классов.

Так что, если вам действительно нужно это сделать, вы, вероятно, могли бы сделать что-то вроде следующего:

public void setFields(Object myObject) {
    Class<?> clazz = myObject.getClass();
    Field[] fields = clazz.getFields();
    for(Field field : fields) {
        String name = field.getName();
        if(name.equals("person")) {
            field.set(myObject, new Person());
        } else if (name.equals("color")) {
             // etc...
        }
    }

}
...