dubbo 是否支持接口默认方法

sbdsn5lh  于 2022-10-21  发布在  其他
关注(0)|答案(5)|浏览(215)

default void setDeptName(List items, Function<T, Integer> mapper, BiConsumer<T, String> consumer) {
......
}

在接口中定义这样的默认方法,调用的时候报序列化错误

l7wslrjt

l7wslrjt1#

有报错信息吗,我这边测试 2.7.15 是支持 default 方法调用的,理论上其他版本也是支持的

nlejzf6q

nlejzf6q2#

报的是序列化异常,因为Function跟BiConsumer没有实现序列化导致的,但这个接口默认方法应该是在消费端执行的,应该不需要序列化才对

2hh7jdfx

2hh7jdfx3#

用函数式接口作为参数的话,consumer 调用的时候不要用 lambda 表达式,需要新写一个类,实现对应的函数式接口和Serializable接口,然后传递该类示例

目前 dubbo 默认的 hessian 不支持lambda表达式的反序列化,我会看一下能否实现一下

58wvjzkj

58wvjzkj4#

报的是序列化异常,因为Function跟BiConsumer没有实现序列化导致的,但这个接口默认方法应该是在消费端执行的,应该不需要序列化才对

另外补充一下,函数式接口不是在消费端执行的,这段代码会被序列化发送到服务端,在服务端执行

bfrts1fy

bfrts1fy5#

@juzi214032 那还是没办法把执行结果返回到消费端了

我的需求是想抽取设置部门名字的公共代码,有多个服务涉及到部门,现在是在各自的服务里面都要写一段代码

相关问题