首页 > 解决方案 > 使用 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 的情况下实现它?

标签: javalombok

解决方案


您可以在类中编写 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是必需的(这将导致编译器错误,因为没有什么可以被覆盖)。


推荐阅读