Во время чтения эффективного 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
метод!
Это как получить объект и вернуть себя. Зачем? какой-то бесполезный образец?
Кто-нибудь подскажет, пожалуйста, вариант использования?