4

我有一个复杂的对象层次结构,它有几个扩展。

我正在寻找一个可以反射性地在所有字段上插入默认值的库。

例如:

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

class Child extends Person {
    Sibling sibling;
}

class Foo {
   Person person;
   Child child;
}

我想要一个将对象作为参数的库,在这种情况下是Foo类,然后在所有字段上反射性地插入默认值(如果我可以定义默认值更好)。此外,所有地图、列表、集合等都应该得到一个新的

我看过BeanUtils,但据我所知,它并不完全支持我正在寻找的东西。

注意:这些只是示例,我的对象要复杂得多,也更大。它们有很多对象,每个对象都有很多对象,依此类推。两者都有地图,列表等。

将 BeanUtils 和 Google Guava 之类的库合并为我自己的库会更好吗?

4

2 回答 2

3

如果您已经构建了结构,那么使用一种方法应该相当简单(如果在构建时设置它们是一种更合乎逻辑的方法)

如果您事先知道默认值,为什么不在类中设置它们呢?(即默认值,默认值;)

为一个人设置默认名称(除了 null 之外)是否有很大价值 您能否举例说明您希望在哪里动态指定默认值?

于 2011-09-15T07:37:22.337 回答
0

就我个人而言,我只会尝试使用普通的 java 构造函数和/或 getter 和 setter 等。但是从问题中我猜你想要一些可以在不知道类的确切结构的情况下工作的东西。

因此,如果您真的必须这样做,您可能可以按照以下方式进行操作:

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...
        }
    }

}
于 2011-09-15T07:39:13.890 回答