2017-11-08 20 views
0

사용자 정의 유형에 대한 빌더 클래스가 있습니다. 값이 존재하는지 항상 알 수는 없습니다.빌더 클래스 패러다임에서 null 값 등을 처리 하시겠습니까?

그래서 나는이 일을 오전 말할 수 :

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

을 어떤 내 값이 null의 경우 만약 - 다음이 분명히 중단하지만, 코드 블록에 바로 여기에 각각의 널 (null) 검사가 같은 느낌,을 Negate 재사용 할 수있는 빌더 클래스의 가독성과 편의성 ...이를 처리 할 수있는 방법이 있습니까?

+5

왜 고장 났을까요? 'setValue ... '가 null을 돌려주지 않는 한, 어떤 문제도 발생해서는 안된다. 'null' 인수를 건네 준 경우, 값은 null로 설정됩니다. – Strikegently

+0

Wy는'build' 호출로 필드가 일관성이 있는지 확인할 수 없습니까? '선택형'을 사용할 수 있습니까? 세터에서 예외? –

+0

@Strikegently - 그건 이상한데, null을 보낼 때 null 포인터 예외가 생깁니다 ... – MickeyThreeSheds

답변

1

setValueX() 메서드는 MyCustomObjectBuilder의 인스턴스 메서드로 호출됩니다.
null을 매개 변수로 입력해도 문제가되지 않습니다.
이러한 각 방법 중 하나는 마지막 문으로 this을 반환해야합니다.
빌더가 작동하는 방식입니다. 예를 들어

: setValueX() 방법 안에, 당신은 매개 변수의 멤버를 참조하는 경우 물론

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; 
     } 
     ... 
    } 
} 

는, 당신은 null 전에 아니라는 것을 먼저 확인을해야합니다.

+0

그래서 .setValue (SomeOtherObject.getValueA)를 가질 수 있습니다 ... SomeOtherObject는 null이 아니며, 하지만 valueA는 무엇입니까? – MickeyThreeSheds

+0

setValue()에서 매개 변수로 전달하려는 값을 제공하는 빌더 메소드를 의미합니까? – davidxxx

+0

그래, 기본적으로, 그 매개 변수가 null이 될 상황을 처리 할 수 ​​있기를 원합니다. null 포인터 예외가 발생하는 순간에 ... – MickeyThreeSheds