2017-11-08 9 views
0

私はカスタムタイプのビルダークラスを持っています...そして、値が存在するかどうかは必ずしも分かりません。ビルダークラスのパラダイムでnull値などを処理しますか?

だから私はこれをやっていると言うことができます:

MyCustomObject customObj = new MyCustomObject.MyCustomObjectBuilder() 
    .setValueA(valueA) 
    .setValueB(valueB) 
    .setValueC(valueC) 
    .setValueD(valueD) 
    .setValueE(valueE) 
    .build(); 

いかなる場合私の値がnullの場合 - 、これは明らかに中断しますが、私はのように感じるのコードのこのブロックで右ここ個々のヌルチェックを持ってネゲート再利用可能なビルダークラスの読みやすさと利便性...これを処理する方法はありますか?

+5

なぜそれが壊れますか? 'setValue ...'がnullを返さない限り、何の問題も起こらないはずです。 'null'引数を渡すと、値はnullに設定されます。 – Strikegently

+0

Wyは 'build'呼び出しでフィールドが一貫していることを確認できませんか?あなたは 'Optional'のようなものを使用できますか?セッターでの例外? –

+0

@Strikegently - それは奇妙です、私はNULLを送信するときnullポインタの例外が発生します... – MickeyThreeSheds

答えて

1

setValueX()メソッドは、MyCustomObjectBuilderのインスタンスメソッドとして呼び出されます。
nullをパラメータとして指定しても、問題はありません。
これらのメソッドのそれぞれは、最後のステートメントとしてthisを返さなければなりません。
ビルダーの仕組みです。例えば

:もちろん

public class MyCustomObject { 

    private MyCustomObject(){} 
    ... 
    public static class MyCustomObjectBuilder { 

     public MyCustomObjectBuilder setValueA(A a){ 
      ... // do assignment or anything 

      // at the end 
      return this; 
     } 

     public MyCustomObjectBuilder setValueB(B b){ 
      ... // do assignment or anything 

      // at the end 
      return this; 
     } 
     ... 
    } 
} 

setValueX()メソッドの内部で、あなたはパラメータのメンバーを参照する場合、あなたはそれが前にnullではないことを最初に確認しています。

+0

したがって、私は.setValue(SomeOtherObject.getValueA)を持っていると言うことができます... とSomeOtherObjectは、 valueAは? – MickeyThreeSheds

+0

setValue()でパラメータとして渡す場合は、値を指定するbuilderメソッドを使用します。 – davidxxx

+0

ええ、基本的には、そのパラメータがnullになる状況を処理できるようにしたいのですが、NULLポインタ例外が発生するとすぐに... – MickeyThreeSheds

関連する問題