能否创建方法名相同的多个Vert.x ProxyGen服务代理?
问题解答
错误提示翻译
ProxyGen 接口中不允许存在重载方法
问题原因
报错并非因为两个不同包的服务代理接口有同名方法,而是单个接口内部存在方法重载:每个接口里的静态方法create(Vertx, Logger)和实例方法void create()方法名相同,属于Java中的重载范畴,而Vert.x的@ProxyGen不允许接口内出现任何形式的方法重载。
解决方法
重命名静态创建方法,避免和实例方法同名,比如将静态的create改为createHandler,修改后的示例代码如下:
修改后的ResourceContract
package com.test.resource.handler; @ProxyGen public interface ResourceContract { static ResourceContract createHandler(Vertx vertx, Logger logger) { return new ResourceHandler(vertx, logger); } static ResourceContract createProxy(Vertx vertx, String address) { return new ResourceContractVertxEBProxy(vertx, address); } void create(); void read(); void update(); void delete(); }
修改后的AgentContract
package com.test.agent.handler; @ProxyGen public interface AgentContract { static AgentContract createHandler(Vertx vertx, Logger logger) { return new AgentHandler(vertx, logger); } static AgentContract createProxy(Vertx vertx, String address) { return new AgentContractVertxEBProxy(vertx, address); } void create(); void read(); void update(); void delete(); }
补充说明
Vert.x的@ProxyGen在生成代理类时,会基于方法名生成事件总线的消息标识,重载方法会导致标识冲突,因此禁止接口内出现重载。不同接口之间的同名方法完全不受影响,只要单个接口内部无重载即可。
内容的提问来源于stack exchange,提问作者Michael Yerkin
相关产品推荐
相关产品推荐

