
当需要将 function
在 Java 泛型中,Void 是一个不可实例化的占位类型(其构造函数为 private),唯一合法的值只有 null。因此,Function
- 调用方必须且只能传入 null(如 func.apply(null));
- 实现方不得依赖参数做任何有意义的计算(因为无非 null 值可传)。
这比使用 Function
// ✅ 推荐:语义清晰,编译期约束强 FunctionuuidSupplier = ignore -> UUID.randomUUID().toString(); // 使用方式(明确体现“忽略参数”意图) String id = uuidSupplier.apply(null); // 唯一合法调用 // ❌ 不推荐:类型宽泛,无法表达设计意图 Function
⚠️ 注意事项:
- Void 并非“void”,后者是关键字,表示无返回值;而 Void 是 java.lang.Void,是一个引用类型;
- 不要试图 new Void() —— 它会编译失败;
- 若 API 允许,优先直接使用 Supplier
;仅在需兼容 Function 接口(如某些框架回调、泛型工具方法约束)时,才选用 Function ; - 同理,若需将 Consumer 表达为 Function(如适配某些函数式接口链),应使用 Function
,并始终返回 null。
总结:Function










