对于一个案例
,可以按如下方式检查参数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。
可以有效捕获运行时异常的其他情况是什么,以便客户端代码不必处理它,并且可以从公共代码(如框架代码)提供解决方案?
答案 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
}
}
如果多次使用值,这甚至可以节省检查开销。