如何调用此模式,是否存在任何现有的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
这没问题。我想知道这种模式是否已经知道,所以我不必自己选择合适的单词。
答案 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>.
显然这有问题。