Что делает метод идентификации, Generic Singleton Java - PullRequest
2 голосов
/ 11 марта 2019

Во время чтения эффективного Java Глава 5, пункт 27

В нем говорится об общем шаблоне синглтона:

Теперь предположим, что вы хотите предоставить функцию идентификации. Это было бы расточительно создавать новый каждый раз, когда это требуется, так как это без гражданства. Если бы дженерики были овеществлены, вам понадобилась бы одна личность функции для каждого типа, но так как они удалены, вам нужен только общий синглтон. Вот как это выглядит:

public class GenericSingleton<T> {
    private static UnaryFunction<Object> IDENTIFY_FUNCTION = new UnaryFunction<Object>() {
        @Override
        public Object apply(Object args) {
            return args;
        }
    };

    @SuppressWarnings("unchecked")
    public static <T> UnaryFunction<T> identityFunction() {
        return (UnaryFunction<T>) IDENTITY_FUNCTION;
    }

    public static void main(String[] args) {
        String[] strings = {"jute", "hemp", "nylon"};
        UnaryFunction<String> sameString = identityFunction();
        for (String s : strings) {
            System.out.println(sameString.apply(s));
        }
        Number[] numbers = {1, 2.0, 3L};
        UnaryFunction<Number> sameNumber = identityFunction();
        for (Number n : numbers) {
            System.out.println(sameNumber.apply(n));
        }
    }
}

Я не могу понять, что на самом деле делает apply метод!
Это как получить объект и вернуть себя. Зачем? какой-то бесполезный образец?

Кто-нибудь подскажет, пожалуйста, вариант использования?

1 Ответ

4 голосов
/ 11 марта 2019

Вариант использования: Collectors.toMap().

Скажем, у вас есть список элементов, идентифицированных уникальным ключом, и вы хотите Map от этого уникального ключа к объектусама по себе.

Collectors.toMap() нужны две функции:

  • одна для извлечения ключа из объекта
  • другая для извлечения значения из объекта

Поскольку значением должен быть сам объект, вам нужна функция, которая принимает объект и возвращает тот же объект - который является вашей функцией идентификации.

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