我在我的 java 项目中使用 lombok 库。
@Data
public class Score {
private long grade;
}
Run Code Online (Sandbox Code Playgroud)
通过这段代码,我自动获得了 getter 和 setter。例如
Score score = new Score();
score.setGrade(10);
// when I call score.getGrade(), I get 10.
Run Code Online (Sandbox Code Playgroud)
但现在我想自定义 setter 方法来为等级值引入额外的逻辑。例如
public void setGrade(long grade) {
// so the returned value from getter is always 1 bigger than what has been set.
this.grade += 1;
}
Run Code Online (Sandbox Code Playgroud)
基本上,我想要score.setGrade(10)但score.getGrade()返回 11。这是覆盖设置器。如何使用 lombok 来实现它?
mar*_*dus 12
你可以只在类中编写 getter 方法。Lombok 不会覆盖方法。如果它应该生成的方法已经存在,它将跳过该方法。
所以你可以这样做:
@Data
public class Score {
private long grade;
public void setGrade(long grade) {
this.grade = grade + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
或者直接重写 getter:
@Data
public class Score {
private long grade;
public long getGrade() {
return this.grade + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:添加您的评论:@Override仅当您重写超类或接口中的方法时才需要。Lombok 将该方法直接注入到您的类中,因此不需要@Override(并且它将导致编译器错误,因为没有任何内容可以被覆盖)。