通过框架中的通用代码部分有效地检查运行时方法的参数值

时间:2013-09-04 07:13:13

标签: java frameworks

对于一个案例

,可以按如下方式检查参数
public abstract class AbstractCHeck{
protected boolean afterObjectChecked( boolean originalResult)
    {
        return originalResult;
    }   

     protected void beforeObjectChecked(Object object)
    {
        Assert.notNull(object, getClass().getName() + " null values");

    }
    public  boolean doAllErroeFreeOperation(Object object)
    {   
        beforeObjectChecked(object); // THIS CODE PROTECT AGAINST NULL BEFORE ACTUAL METHOD IS CALLED.
        boolean result = doActualOperation(object);
        return afterObjectChecked(result);
    }
public abstract boolean doActualOperation(Object obj);

public  class mainCheck extends AbstractCHeck{

public  boolean doActualOperation(Object obj){

// some operation done


}
Client{
Maincheck clientprogram=new Maincheck();
clientprogram.doAllErroeFreeOperation(null); // 
}

CaseII。 在调用实际方法并检查其值之前,可以使用Interceptor。

可以有效捕获运行时异常的其他情况是什么,以便客户端代码不必处理它,并且可以从公共代码(如框架代码)提供解决方案?

1 个答案:

答案 0 :(得分:0)

您可以引入新的类型包装值并保证某些约束。然后将它们用作参数类型。实施例(一个或多个):

public final class NotNull<T> {
  public final T value;

  public NotNull(T t) {
    if(t==null) throw new NullPointerException();
    value=t;
  }
}

public final class NotNegative {
  public final int value;

  public NotNegative(int i) {
    if(i<0) throw new IllegalArgumentException();
    value=i;
  }
}

public class Example {
  public void doSomethig(NotNegative ni, NotNull<String> s) {
    String str=s.value; int i=ni.value; // not checks needed
  }
}

如果多次使用值,这甚至可以节省检查开销。