使用Lombok库,但如何自定义/重写setter方法

Lee*_*eem 5 java lombok

我在我的 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(并且它将导致编译器错误,因为没有任何内容可以被覆盖)。