Шаблон о преобразовании метода доступа к коллекции - PullRequest
1 голос
/ 16 декабря 2011

Как вызвать этот шаблон, и есть ли какая-либо существующая утилита 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 ]

1 голос
/ 16 декабря 2011

Я не думаю, что существует шаблон как таковой, но guava предоставляет простой способ преобразования коллекции из одной в другую.Для примера:

List<Person> persons = ...;
Iterable<String> names = Iterables.transform(persons, new Function<Person, String>() {
    @Override
    public String apply(Person person) {
        return person.getName();
    }
});
1 голос
/ 16 декабря 2011

Я не думаю, что инструмент для этого существует. Вы должны закодировать это:

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

Может быть, вы можете использовать интроспекцию, чтобы быть более общим, но код действительно прост.

0 голосов
/ 16 декабря 2011

Возможность состоит в том, чтобы объявить интерфейс для всех методов, например (ведущий I для ясности) INamable, IAgeable, ISexable и т. Д. Приведение the List<Person> to List<ISomething>. Очевидно, что это имеет проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...