如果没有设置某个值,如何抛出编译时异常。

时间:2017-06-06 07:26:24

标签: java android performance android-layout

我创建了一个Android库,其中有一个方法setContext()。客户端需要传递上下文其他明智的应用程序将在运行时崩溃如果用户没有设置上下文,我需要在编译时抛出一个错误。我无法通过它将构造函数作为其singleton类抛出。

客户端

SampleLibrary sl= SampleLibrary.getInstance();
sl.setContext(this);

public void setContext(Context context){
  this.context= context; 
}

请指导我如何设置编译时异常,如果未设置某个值或为null。

4 个答案:

答案 0 :(得分:2)

这样做

sl.setContext(this);

为开发人员提供了不设置上下文的选项,或者忘记设置它......

但是如果你将类定义为

公开SampleLibrary(Context ctx)然后就完成了!他们没有其他机会在不给出上下文的情况下创建 SampleLibrary 的对象

答案 1 :(得分:0)

避免在单例中设置Context。它可能是null或值得创建内存泄漏。 您应该在需要时将Context传递给类构造函数

如果您想在运行时抛出异常:

  private setField(String value) throws IllegalStateException {
            if (TextUtils.isEmpty(value) {
                throw new IllegalStateException("Missing values");
// set your value here
     }

答案 2 :(得分:0)

public void setContext(Context context){

应该是

public synchronized void setContext(Context context){

当然,它假设一个客户使用该类 否则你可以在线程调用之间覆盖单例状态,并且一个线程与另一个脚本设置的上下文一起工作似乎是不合适的(在竞争条件情况下)。

  

客户端需要传递上下文其他明智的应用程序将在运行时崩溃。一世   如果用户没有设置上下文,则需要在编译时抛出错误。

编译器不是为检查代码的功能验证而设计的。 它检查你是否尊重语言规则,它已经很好了。

如果用户在未设置上下文时尝试操作类,则需要运行的运行时异常。

要实现这一目标,您可以在需要上下文的所有公共方法中将检查作为第一项任务 当然,您可以创建一个私有方法,并在每个地方重复使用它。

如果检查失败,则抛出带有相应消息的RuntimeException 如果你真的想避免在很多地方进行这些检查,你仍然可以使用AOP。

答案 3 :(得分:0)

try {

   //your statement here

} 

catch (RuntimeException ex) 

{

//do something with the runtime exception

}