java - 使用 Lombok 库,但如何自定义/覆盖 setter 方法
问题描述
我在我的 java 项目中使用 lombok 库。
@Data
public class Score {
private long grade;
}
使用此代码,我可以自动获得 getter 和 setter。例如
Score score = new Score();
score.setGrade(10);
// when I call score.getGrade(), I get 10.
但是现在我想自定义 setter 方法来为等级值引入额外的逻辑。例如
public void setGrade(long grade) {
// so the returned value from getter is always 1 bigger than what has been set.
this.grade += 1;
}
基本上,我想要score.setGrade(10)
但score.getGrade()
返回 11。那是覆盖设置器。如何在使用 lombok 的情况下实现它?
解决方案
您可以在类中编写 getter 方法。Lombok 不会覆盖方法。如果它应该生成的方法已经存在,它将跳过该方法。
所以你可以这样做:
@Data
public class Score {
private long grade;
public void setGrade(long grade) {
this.grade = grade + 1;
}
}
或者只是覆盖getter:
@Data
public class Score {
private long grade;
public long getGrade() {
return this.grade + 1;
}
}
编辑:添加您的评论:@Override
仅当您覆盖超类或接口的方法时才需要。Lombok 将该方法直接注入到您的类中,因此 no@Override
是必需的(这将导致编译器错误,因为没有什么可以被覆盖)。
推荐阅读
- javascript - 已注册具有该名称的指标 | nodejs应用程序中的prometheus自定义指标
- apache - 如何从响应标头内容类型中删除 charset=utf-8
- bash - 如何从 shell 中的命令获取输出的第二个单词?
- android - SurfaceView 上不显示 TextView
- java - Spring Boot - 休眠验证在 Tomcat 和 Jetty 中的行为不同
- ios - 如何为 WidgetKit 异步下载图像
- google-apps-script - 如何检查是否没有输入新数据,应用脚本在 Google 表格中不会执行任何操作
- python - Python pip:使用/需要允许的端口和IP地址范围是什么
- javascript - JavaScript / jQuery 中的 PrototypeJS 类
- html - 对齐通用元素,使其填满