2012-07-10 43 views
1

我在mClass构造如下代码:处理空值,其中不允许

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

上下文不能为空,因为它necesary为对象的操作。所以如果我允许创建一个新的mClass(null),它将在稍后中断。

当创建对象时,我想崩溃,因为发生错误情况时。这是什么标准的做法?

例如使

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

军队申报方法例外运动员,我不wan't这样做,因为传递一个空值是不常见

回答

7

java.lang.IllegalArgumentException

这是一个运行时异常,所以你不需要强行处理这个,如果它被抛出,应用程序将会崩溃(如果它没有处理)

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,它会让你的代码更健壮。