在不允许的情况下处理空值

时间:2012-07-10 10:00:41

标签: java android

我在mClass构造函数中有以下代码:

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

上下文不能为null,因为它是对象操作的必要条件。因此,如果我允许创建一个新的mClass(null),它将在以后中断。

我想在创建对象时崩溃,因为当发生不正确的情况时。这样做的标准方法是什么?

例如制作

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

强制将方法声明为异常thrower并且我不想这样做因为传递空值不常见

3 个答案:

答案 0 :(得分:7)

抛出java.lang.IllegalArgumentException

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

答案 1 :(得分: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;
    }
}

答案 2 :(得分:1)

如果MyClass无法负责构建自己的Context,那么你应该像你一样注入它。抛出RuntimeException或任何子类将进行空检查,但IllegalArgumentException最适合此处。

不要忘记创建ctx字段final,它会使您的代码更加健壮。