2012-07-10 2 views
1

i를 mClass 생성자에 다음 코드가 있습니다은 허용되지 곳에

public mClass(Context ctx) { 
    super(); 
    this.ctx = ctx; 
} 

컨텍스트가 null 일 수 없습니다를하기 때문에 오브젝트 작업에 대한 모든 necesary. 그래서 새로운 mClass (null)의 생성을 허용하면 나중에 깨질 것입니다.

잘못된 상황이 발생했기 때문에 개체를 만들 때 충돌 사고 싶습니다. 이 일을하는 표준 방법은 무엇입니까?

예외 던지는 등의 방법을 선언

public mClass(Context ctx) { 
    super(); 
    if(ctx==null) throw new Exception ("...."); 
    this.ctx = ctx; 
} 

힘을 예를 들어

내가 널 값을 전달하는

답변

7

던져 java.lang.IllegalArgumentException 보통이 아니기 때문에이 작업을 수행 할 wan't 해달라고,

이것은 런타임 예외이므로 강제로 처리 할 필요가 없으며 처리되는 경우 응용 프로그램이 손상 될 수 있습니다 (처리되지 않은 경우)

1

throwing an exception from the constructor은 클래스의 생성자를 비공개로 만들 수 있으므로 클라이언트가 빌더를 통해 클래스 인스턴스 만 만들 수 있습니다. 아래 그림과 같이 빌더는 객체를 구성하기 전에 공급 생성자 종속성의 유효성을 확인할 수 있습니다

public class MyClass { 

    public static class MyClassBuilder { 
     private Context ctx; 

     public MyClassBuilder setContext(Context ctx) { 
      this.ctx = ctx; 

      return this; 
     } 

     public MyClass build() { 
      if(ctx==null) { 
       throw new IllegalArgumentException (""); 
      } else { 
       return new MyClass(this.ctx); 
      } 
     } 
    } 

    private final Context ctx; 

    private MyClass(Context ctx) { 
     super(); 
     this.ctx = ctx; 
    } 
} 
1

MyClass 경우 당신처럼 당신이 그것을 주입한다 Context 자체 구축에 대해 책임을지지 않습니다. RuntimeException 또는 임의의 서브 클래스를 던지면 널 체크가되지만, 여기서 IllegalArgumentException이 가장 적합합니다.

ctx 필드를 final으로 만드는 것을 잊지 마세요. 그러면 코드가 더욱 강력해질 것입니다.

관련 문제