使用Lombok库,但如何自定义/覆盖setter方法

时间:2020-02-27 14:09:47

标签: java lombok

我在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来实现它?

2 个答案:

答案 0 :(得分:1)

您可以只在类中编写getter方法。龙目岛不会覆盖方法。如果已经存在应生成的方法,它将跳过该方法。

所以您可以这样做:

@Data
public class Score {
  private long grade;

  public void setGrade(long grade) {
    this.grade = grade + 1;
  }
}

或者只是改写吸气剂:

@Data
public class Score {
  private long grade;

  public long getGrade() {
    return this.grade + 1;
  }
}

编辑: 要添加您的评论:仅当您从超类或接口重写方法时,才需要@Override。 Lombok将方法直接注入到您的类中,因此不需要@Override(这将导致编译器错误,因为没有可以覆盖的内容)。

答案 1 :(得分:0)

这对我来说很好

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";
    }
}