1

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

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

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

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

例如制作

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

强制将该方法声明为异常抛出者,我不想这样做,因为传递空值并不常见

4

3 回答 3

7

投掷java.lang.IllegalArgumentException

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

于 2012-07-10T10:02:30.703 回答
1

如果MyClass不能负责构建它自己的Context,你应该像你一样注入它。抛出一个RuntimeException或任何子类将用于空检查,但IllegalArgumentException在这里最合适。

不要忘记将 ctx 字段设为final,它将使您的代码更加健壮。

于 2012-07-10T10:35:43.703 回答
1

您可以通过将类的构造函数设为私有来避免从构造函数中抛出异常,从而确保客户端只能通过构建器创建类的实例。构建器可以在构造对象之前检查提供的构造函数依赖项的有效性,如下所示:

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;
    }
}
于 2012-07-10T10:16:40.393 回答