2016-08-17 53 views
0

我想我可能已经知道答案但已选择要求澄清。Java - 设置器中值的验证

我有私有变量,getter和setter方法的简单POJO。

有些是字符串变量,我只想让他们被初始化时要使用特定的字符串。

我的问题很简单 - 我应该把这个验证的POJO - 也许在制定者的一个或应设置器调用之前,此验证在其他地方发生?

下面的例子应该只允许值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; 
} 

有效设置默认值,如果在“弗雷德”什么愚蠢的人的类型。

我询问这个​​理由纯粹是因为我工作的地方我看到这种事情经常,在这里接受,但我不知道是应该的。

+7

使用'enum'只允许这两种类型,并使用enum作为参数。 – SomeJavaGuy

+2

使用枚举做你想做的事 –

+0

有人喜欢外部Validator,有人喜欢getter中的验证,有人用Decorator模式做。你决定。 – ByeBye

回答

2

这样做的通常方法现在enum是一个一流的类型是使用enum

private CompressionType compressionType = null; 

public enum CompressionType { 
    Compress, 
    GZip; 
} 

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

但是,如果确认是沉重的,你可以考虑factorydecorator

+2

请注意,您仍然希望在set-method中进行一些验证:即使用Objects.requireNonNull(compressionType,“压缩类型不能为空”)检查null。你可能想要将该字段初始化为GZip。这两个步骤将始终保证有效的价值。 – VGR

+0

感谢这个答案,当我说我可能知道答案时,事实上我没有:) – thonnor