关于集合访问器转换的模式

时间:2011-12-16 15:05:40

标签: java design-patterns

如何调用此模式,是否存在任何现有的apache-commons实用程序:

class Person {
    String getName();
}

List<Person> persons = ...;

// create a dynamic bean on the fly, which can be used as:
Object personXxxx = transformListOfBeans(Person.class, persons);
// so each of the bean properties now returns the list of the original property:
List<String> personNames = personXxxx.name;

// i.e. the transformation creates a new "type":
class PersonXxxx {
    List<String> getName();
}

如何称这种转变?代理应该保留方法签名。所以它不是代理人,也不是装饰者。

好吧,我可以简单地将生成的属性名称重命名为复数形式,例如:

personXxxx.names

这没问题。我想知道这种模式是否已经知道,所以我不必自己选择合适的单词。

3 个答案:

答案 0 :(得分:1)

我认为不存在这样的工具。 你必须编码:

List<String> names = new ArrayList<String>(persons.size());
for (Person person : persons) {
    names.add(person.getName());
}

也许您可以使用内省更通用,但代码非常简单。

答案 1 :(得分:1)

我认为没有这样的模式,但番石榴提供了一种简单的方法来将一个集合转换为另一个集合。例如:

List<Person> persons = ...;
Iterable<String> names = Iterables.transform(persons, new Function<Person, String>() {
    @Override
    public String apply(Person person) {
        return person.getName();
    }
});

答案 2 :(得分:0)

一种可能性是为所有方法声明一个接口,例如: (为了清晰起见,我领导我)INamable,IAgeable,ISexable等。演员the List<Person> to List<ISomething>.显然这有问题。