我在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来实现它?
答案 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";
}
}