【发布时间】:2015-12-02 21:43:17
【问题描述】:
我正在做一个为照片制作滤镜的项目,我们使用 getter 和 setter 方法设置新的 RGB 值。
public class Color {
private double red;
private double green;
private double blue;
public Color() {
this.setRed(1.0);
this.setGreen(1.0);
this.setBlue(1.0);
}
public Color(double red, double green, double blue) {
this.setRed(red);
this.setGreen(green);
this.setBlue(blue);
}
... (code for other functions after those tests pass)
public double getRed(){
return red;
}
public void setRed(double color1){
if (color1 <= 1.0){
if (color1 >= 0.0){
red = color1;
}
}
else if (color1>1.0){
red=1.0;
}
else if (color1<0.0){
red=0.0;
}
}
}
每个 getter 和 setter 都是 getRed/setRed 的副本。我已经通过我无权访问的程序检查了定义,但这是我收到的输出:
测试失败:
场景:3.1 - 调用 setRed(-1.0) 后,getRed() 的返回值应该是 0.0
颜色(1.0,1.0,1.0).setRed(-1.0) - 好的
Color(1.0,1.0,1.0).getRed() - 预期 0.0 - 返回 1.0
所以 setter 按我的需要运行,但 getter 正在返回原始值。这不是一个孤立的情况,我的每个 getter 在每个 setter 成功运行时都返回各自颜色的原始值 (1.0)。
【问题讨论】:
-
每次运行 getter 时是否都在创建新颜色?
-
每次测试运行都没有新颜色。我们使用相同的 Color 实例进行 set/get 的东部测试运行
-
单传:
this.red = color1 < 0.0 ? 0.0 : color1 > 1.0 ? 1.0 : color1; -
@HovercraftFullOfEels 这似乎可以实现相同的最终目标,但教师似乎对这种实现有疑虑(至少测试代码是这样)。不过,将其保存为将来程序的注释。
-
只是提出一些一般性建议: 1) 由于这是一个值类,您应该强烈考虑使其实例不可变; 2)考虑用Builder Pattern 构造颜色实例; 3) 在不可变类上测试不变量的最佳位置是在构造函数中(这将允许您从 setter 方法中进行测试)。
标签: java getter-setter