java中向类变量添加值的优雅方法

java中向类变量添加值的优雅方法,java,Java,我有一个班级说学生 public class Student { private String name; private int score; } 假设我有所有的getter/setter 目前,我有一个学生类的对象,称为std,它的分值为50。 我想在这个物体的分数上加10 我可以通过以下代码完成此操作: std.setScore(std.getScore() + 10); 我正在寻找一种优雅的方法来写同样的东西,我不需要同时使用getter和setter,只需要将分数增

我有一个班级说学生

public class Student {
    private String name;
    private int score;
}
假设我有所有的getter/setter

目前,我有一个学生类的对象,称为
std
,它的分值为50。 我想在这个物体的分数上加10

我可以通过以下代码完成此操作:

std.setScore(std.getScore() + 10);
我正在寻找一种优雅的方法来写同样的东西,我不需要同时使用getter和setter,只需要将分数增加10甚至1。 比如说使用++或+=10等。写一个方法:

public void incrementScore(整数金额){
分数+=金额;
}
是否允许负增量?如果没有,请检查:

/**
*按给定的数量增加分数。
*
*@param amount分数增加的金额;不能是否定的
*@如果金额为负数,则抛出IllegalArgumentException
*/
公共作废增量分数(整数金额){
如果(金额<0){
抛出新的IllegalArgumentException(“增量不能为负”);
}
分数+=金额;
}
这种方法比使用
get
/
set
更优雅,因为:

  • 它允许您根据业务规则检查参数
  • 它添加了一个业务方法,其名称显示了意图
  • 它允许您编写JavaDoc注释来描述操作的确切行为

如评论中所述,您可以在学生课堂上创建一个新方法

public class Student {
   private String name;
   private int score;

   public void incrementScore(int increment){
       this.score = this.score + increment;
   }
}
然后在std实例上调用它:

标准增量分数(10)


添加另一种方法
递增
?但是我不知道这能为您节省什么,如果有什么需要的话,创建一个
incrementBy(int)
方法。由于这些先决条件看起来不像是实际的封装,您只需将
score
设置为
public
字段,而无需更改任何内容。然后,您可以编写
std.score+=10这与java-8有什么特别的关系?它将如何使事情变得更好?@AndrewTobilko比使用
std.setScore(std.getScore()+10)更好?那么错误检查呢?“你对透露姓名的意图有什么看法?”卢茨霍恩我认为你用了一种不属于它的方法来污染这个班的学生。如果我们有
restoreScore()
doubleScore()
validateScore()
,你还会把它们放在这个类中吗?@LutzHorn这感觉不是一个好的面向对象方法。
student.incrementScore(1)
student.restoreScore()
看起来都不对。班级
学生
做不该做的事。假设你有2-3个这样的字段,每个字段都有一些操作,那么类就会变得一团糟。@LutzHorn我相信
student.getScore().increment(1)
是一种更好的方法。是的,它引入了一个新的类,但是它保持了
学生的
清晰,并且免除了不应该承担的责任。(当然,我可能错了)