使用Project Lombok时出现模糊方法调用问题求助
解决Lombok生成isMatch()方法的歧义问题
这个问题我之前也碰到过,核心原因是你的NameParserResponse类(或者它继承的Response父类)里出现了两个签名完全一致的isMatch()方法,导致编译器无法判断该调用哪一个。哪怕你移除了@Builder,@Getter注解依然会为boolean类型的match字段自动生成isMatch()方法,如果父类Response本身已经定义了这个方法,冲突就会持续存在。
下面给你几个可行的解决方案:
检查并处理父类方法
先确认父类Response中isMatch()方法的作用,如果这个父类方法不是你需要的,可以考虑调整继承关系;如果必须保留继承,就手动覆盖父类的方法,明确指定返回当前类的match字段值。手动编写Getter方法
禁止Lombok为match字段自动生成Getter,然后自己实现isMatch()方法,这样就能完全控制方法的逻辑,避免冲突:
@Getter @Builder public class NameParserResponse extends Response { @Getter(AccessLevel.NONE) // 关闭Lombok自动生成该字段的Getter private boolean match; // 手动实现Getter,覆盖父类方法 @Override public boolean isMatch() { return this.match; } }
- 修改字段名称
如果业务允许,把match字段改成其他名称(比如matched),这样Lombok生成的Getter方法会变成isMatched(),自然就不会和父类的isMatch()方法冲突了:
@Getter @Builder public class NameParserResponse extends Response { private boolean matched; }
内容的提问来源于stack exchange,提问作者Adrian Elder
相关产品推荐
相关产品推荐

