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)
是一种更好的方法。是的,它引入了一个新的类,但是它保持了学生的清晰,并且免除了不应该承担的责任。(当然,我可能错了)