我在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并且我不想这样做因为传递空值不常见
答案 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,它会使您的代码更加健壮。