使用 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";
}
}
我在我的 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";
}
}