Java - 设置器中值的验证

Java - Validation of values in setters

我想我可能已经知道答案了,但我选择要求澄清。

我有一个带有私有变量、吸气剂和 setters 的简单 POJO。

其中一些是字符串变量,我只想在初始化时允许使用某些字符串。

我的问题很简单——我应该把这个验证放在 POJO 中——也许在 setter 之一中,还是应该在调用 setter 之前在其他地方进行验证?

下面的示例应该只允许值 gzipcompress

private String compressionType = null;

public void setCompressionType(String compressionType) {

    if( ! ( compressionType.equals("gzip") ) || ( compressionType.equals("compress") ) )
    {
        compressionType = "gzip"; //a chosen default
    }

    this.compressionType = compressionType;
}

如果有人输入 "fred" 或一些愚蠢的东西,则有效地设置默认值。

我问这个纯粹是因为我工作的地方经常看到这种东西,这里被接受了,但我不确定是否应该被接受。

现在 enum 通常的做法是第一种 class 类型是使用 enum:

private CompressionType compressionType = null;

public enum CompressionType {
    Compress,
    GZip;
}

public void setCompressionType(CompressionType compressionType) {
    this.compressionType = compressionType;
}

但是,如果验证很重,您可以考虑 factorydecorator