为了账号安全,请及时绑定邮箱和手机立即绑定

身份方法有什么作用,通用单例java

身份方法有什么作用,通用单例java

潇湘沐 2022-07-27 16:32:01
在阅读有效的 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 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

一个用例是Collectors.toMap().

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

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

  • 一种从对象中提取密钥

  • 另一个从对象中提取值

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


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信