2016-08-17 9 views
0

私は既に答えを知っているかもしれないが、それを明確にするように頼んだことがあると思う。Java - セッターの値のバリデーション

私は、プライベート変数、ゲッタ、セッタを持つ単純なPOJOを持っています。

これらの中には、初期化時に特定の文字列を使用できるようにする文字列変数があります。

私の質問は簡単です - この検証はPOJOに入れてください - おそらく設定者の1人にしても、設定者が呼び出される前に別の場所でこの検証を行うべきですか?

次の例では、唯一の「フレッド」やダフト何かの誰かの種類あれば値が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; 
} 

効果的にデフォルト値を設定できるようにすべきです。

私が働くところでは、このようなことが頻繁に起こるので、ここで受け入れられますが、私はそれがすべきかどうかはわかりません。

+7

これらの2つの型だけを許可するには 'enum'を使用し、enumはパラメータとして使用します。 – SomeJavaGuy

+2

enumを使ってあなたがしたいことをする –

+0

誰かが外部のバリデータを好む、ゲッターでの検証のような誰かが、デコレータパターンでそれをする人。あなた次第です。 – 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にできません ");'を使ってnullをチェックします。そして、おそらくフィールドをGZipに初期化したいと思うでしょう。これらの2つのステップは、常に有効な値を保証します。 – VGR

+0

この回答をありがとう、私は答えを知っているかもしれないと言いましたが、私は実際にはなかった:) – thonnor

関連する問題