身份方法有什么作用,通用Singleton Java

时间:2019-03-11 04:27:34

标签: java generics singleton

阅读有效的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 个答案:

答案 0 :(得分:4)

一个用例是Collectors.toMap()

假设您有一个由唯一键标识的项目列表,并且想要从该唯一键到对象本身的Map

Collectors.toMap()需要两个功能:

  • 从对象中提取密钥的人
  • 另一种从对象中提取值的方法

由于值应该是对象本身,因此您需要一个接受对象并返回相同对象的函数-这就是您的标识函数。