Java中能否用方法引用实现Function<Foo,Bar>类型的实例转换?
问题解答
首先,因为Foo继承自Bar,任何Foo的实例本身就是Bar的实例,所以你需要的Function<Foo, Bar>本质上就是一个“返回输入自身”的函数——Java标准库已经提供了现成实现,完全不需要新建方法:
- 直接使用
Function.identity():它的类型是Function<T, T>,由于Foo是Bar的子类,这个实例可以直接赋值给Function<Foo, Bar>类型的变量,返回值的协变特性允许这种向上转型。
如果偏好方法引用的形式,其实没有专门的“返回自身”的方法引用,但Function.identity()已经是最简洁的复用方案,完全满足你的需求:接收Foo实例,返回它作为Bar类型的实例。
举个代码示例:
// 定义接口 interface Bar {} interface Foo extends Bar {} // 初始化转换器 Function<Foo, Bar> converter = Function.identity(); // 测试使用 Foo fooInstance = new Foo() {}; Bar barInstance = converter.apply(fooInstance); // barInstance就是fooInstance本身,完美适配暴露Bar接口的需求
这种方式能直接适配你的封装场景:通过这个转换器把Foo实例以Bar类型暴露,既保留Bar的全部接口方法,又无需编写任何额外的转发代码。
内容的提问来源于stack exchange,提问作者Scott McDiggles
相关产品推荐
相关产品推荐

