使用 Lombok 库,但如何 customize/override setter 方法

Using Lombok library, but how to customize/override the setter method

我在我的 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() returns 11。这会覆盖 setter。 使用lombok如何实现?

在class中只写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;
  }
}

编辑: 添加您的评论:仅当您覆盖 superclasses 或接口的方法时才需要 @Override。 Lombok 将方法直接注入到您的 class,因此不需要 @Override(这会导致编译器错误,因为没有任何东西可以被覆盖)。

这对我来说很好

class Scratch {
    public static void main(String[] args) {
        MyDataClass object = new MyDataClass();
        object.setOverriddenSet("some value");
        if (!"fixed value".equals(object.getOverriddenSet())) {
            throw new RuntimeException();
        }
        System.out.println("all went well.");
    }
}

@Data
class MyDataClass {
    String generated;
    String overriddenSet = "fixed initial value";

    void setOverriddenSet(String setTo) {
        overriddenSet = "fixed value";
    }
}