Java - 设置器中值的验证
Java - Validation of values in setters
我想我可能已经知道答案了,但我选择要求澄清。
我有一个带有私有变量、吸气剂和 setters 的简单 POJO。
其中一些是字符串变量,我只想在初始化时允许使用某些字符串。
我的问题很简单——我应该把这个验证放在 POJO 中——也许在 setter 之一中,还是应该在调用 setter 之前在其他地方进行验证?
下面的示例应该只允许值 gzip
或 compress
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;
}
但是,如果验证很重,您可以考虑 factory
或 decorator
。
我想我可能已经知道答案了,但我选择要求澄清。
我有一个带有私有变量、吸气剂和 setters 的简单 POJO。
其中一些是字符串变量,我只想在初始化时允许使用某些字符串。
我的问题很简单——我应该把这个验证放在 POJO 中——也许在 setter 之一中,还是应该在调用 setter 之前在其他地方进行验证?
下面的示例应该只允许值 gzip
或 compress
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;
}
但是,如果验证很重,您可以考虑 factory
或 decorator
。