为何多方法类的方法引用可适配函数式接口?Android Studio技术疑问
为什么Lambda表达式
() -> return arm.getServoPos()可以改写为方法引用arm::getServoPos且不报错? 核心逻辑是:函数式接口的约束针对的是你要赋值/传递的目标类型,而不是方法所属的类。你把Lambda或方法引用用在某个需要函数式接口的上下文里(比如变量类型、方法参数类型),这个上下文的接口才需要满足“仅一个抽象方法”的要求,和
LiftServoSubsystem类有多少方法完全无关。arm::getServoPos是实例方法引用,它的作用是匹配函数式接口的抽象方法签名。比如如果目标函数式接口的抽象方法是「无参数、返回值类型和getServoPos()一致」,那这个方法引用就和原Lambda() -> arm.getServoPos()完全等价——本质都是调用arm.getServoPos()并返回结果,刚好符合接口的要求。举个具体例子,假设你用这个方法引用的地方需要的是
Supplier<Integer>(Java标准库的函数式接口,抽象方法是无参的get()),那arm.getServoPos()的签名(无参、返回整数)完美适配这个接口,所以编译器完全认可,哪怕LiftServoSubsystem还有setServoPos()、lift()等其他方法,也不会有任何影响。
内容的提问来源于stack exchange,提问作者getrithekd
相关产品推荐
相关产品推荐

