为何返回方法引用的@Bean方法可编译?ErrorDecoder类型匹配疑问
为何这段代码能编译通过?
@Bean(name = "ErrorDecoder") public ErrorDecoder streamHubErrorDecoder() { return FeignException::errorStatus; }
原因主要有两点:
ErrorDecoder是函数式接口
ErrorDecoder接口仅包含一个抽象方法decode(String methodKey, Response response),满足Java函数式接口的定义(只有一个未实现的抽象方法)。这类接口可以通过Lambda表达式或方法引用直接实例化,无需编写显式的实现类。方法签名完全兼容
FeignException的errorStatus静态方法签名为:public static FeignException errorStatus(String methodKey, Response response)它的参数列表(
String、Response)与ErrorDecoder抽象方法的参数完全一致;返回值FeignException是ErrorDecoder抽象方法返回值Exception的子类,符合返回值兼容规则。
因此,FeignException::errorStatus这个方法引用会被编译器自动适配为ErrorDecoder接口的实现,所以代码可以正常编译。
内容的提问来源于stack exchange,提问作者Veeraraghavan N
相关产品推荐
相关产品推荐

