Lombok生成的Setter无法调用?问题原因及解决办法
问题原因与解决办法
问题原因
- 方法名拼写错误:你的
ExtraPhraseEntity实体类中定义的字段是frequency,Lombok的@Setter注解会生成对应的Setter方法setFrequency(),但你调用的是setPhrequency()(多了一个字母h),属于拼写错误。 - 强制转换语法错误:当前代码
(ExtraPhraseEntity) phraseEntity.setPhrequency(frequency);的执行逻辑是先调用phraseEntity.setPhrequency(frequency),再把这个方法的返回值(void类型)强制转换为ExtraPhraseEntity,完全不符合预期。编译器会优先将phraseEntity当作Phraseable类型处理,而Phraseable接口中并没有setPhrequency方法,因此抛出无法解析方法的错误。
解决办法
1. 修正方法名拼写+调整强制转换语法
把方法名改成正确的setFrequency,同时调整强制转换的位置,确保转换作用在phraseEntity变量上:
((ExtraPhraseEntity) phraseEntity).setFrequency(frequency);
2. 可选:添加类型检查避免运行时异常
为了防止phraseEntity实际类型不是ExtraPhraseEntity导致的ClassCastException,可以先做类型判断:
if (phraseEntity instanceof ExtraPhraseEntity) { ((ExtraPhraseEntity) phraseEntity).setFrequency(frequency); }
补充优化方案
如果Phraseable接口需要统一处理frequency字段,也可以在接口中定义setFrequency(Integer frequency)方法,让ExtraPhraseEntity实现该方法(Lombok生成的方法会自动满足接口要求),这样就不需要强制转换,直接通过Phraseable类型调用方法即可:
// 修改Phraseable接口 public interface Phraseable { void setFrequency(Integer frequency); // 其他接口方法... }
内容的提问来源于stack exchange,提问作者Kifsif
相关产品推荐
相关产品推荐

