如何在不使用条件 if 语句的情况下设置 class 不变量

How to set class invariants without using conditional if statements

我有一个 class 叫做像素。我正在制作一个构造函数,它接收单个像素的红色、绿色、蓝色、alpha 值。我怎样才能让程序只接受这些有效值(例如 0 到 255)而不使用 if 语句? 下面是我的 class:

public class Pixel {
    public int redPix;
    public int bluePix;
    public int greenPix;
    public int alpha;

    public Pixel(int redPix , int bluePix , int greenPix , int alpha) {
        this.redPix = redPix;
        this.bluePix = bluePix;
        this.greenPix = greenPix;
        this.alpha = alpha;
    }


    public void setRed(int redPix) {
        this.redPix = redPix;
    }
    public int getRed() {
        return(redPix);
    }

    public void setBlue(int bluePix) {
        this.bluePix = bluePix;
    }

    public int getBlue() {
        return(bluePix);
    }

    public void setGreen(int greenPix) {
        this.greenPix = greenPix;
    }

    public int getGreen() {
        return(greenPix);
    }

    public void setAlpha(int alpha) {
        this.alpha = alpha;
    }

    public int getAlpha() {
        return(alpha);
    }

    public static void main(String[] args){
    }


}

很可能,你能做的就是像这样编写方法助手:

private void checkArg(int arg) {
        if (arg < 0 || arg > 255) {
            throw new IllegalArgumentException("Wrong argument: " + arg);
        }
    }

然后在所有方法的开头使用它。

您可以使用断言来指定 class 不变量。它实际上被推荐用于私有方法。

assert x >= 0 && x <= 255;