public final class EvaluationException
extends java.lang.Exception
public Eval evaluate(Eval[] args, int srcRow, short srcCol) { // ... Eval arg0 = args[0]; if(arg0 instanceof ErrorEval) { return arg0; } if(!(arg0 instanceof AreaEval)) { return ErrorEval.VALUE_INVALID; } double temp = 0; AreaEval area = (AreaEval)arg0; ValueEval[] values = area.getValues(); for (int i = 0; i < values.length; i++) { ValueEval ve = values[i]; if(ve instanceof ErrorEval) { return ve; } if(!(ve instanceof NumericValueEval)) { return ErrorEval.VALUE_INVALID; } temp += ((NumericValueEval)ve).getNumberValue(); } // ... }In this example, if any error is encountered while processing the arguments, an error is returned immediately. This code is difficult to refactor due to all the points where errors are returned.
public Eval evaluate(Eval[] args, int srcRow, short srcCol) { try { // ... AreaEval area = getAreaArg(args[0]); double temp = sumValues(area.getValues()); // ... } catch (EvaluationException e) { return e.getErrorEval(); } } private static AreaEval getAreaArg(Eval arg0) throws EvaluationException { if (arg0 instanceof ErrorEval) { throw new EvaluationException((ErrorEval) arg0); } if (arg0 instanceof AreaEval) { return (AreaEval) arg0; } throw EvaluationException.invalidValue(); } private double sumValues(ValueEval[] values) throws EvaluationException { double temp = 0; for (int i = 0; i < values.length; i++) { ValueEval ve = values[i]; if (ve instanceof ErrorEval) { throw new EvaluationException((ErrorEval) ve); } if (!(ve instanceof NumericValueEval)) { throw EvaluationException.invalidValue(); } temp += ((NumericValueEval) ve).getNumberValue(); } return temp; }It is not mandatory to use EvaluationException, doing so might give the following advantages:
Constructor and Description |
---|
EvaluationException(ErrorEval errorEval) |
EvaluationException(ErrorEval errorEval,
java.lang.String message) |
Modifier and Type | Method and Description |
---|---|
ErrorEval |
getErrorEval() |
static EvaluationException |
invalidRef()
#REF!
|
static EvaluationException |
invalidValue()
#VALUE!
|
static EvaluationException |
numberError()
#NUM!
|
public EvaluationException(ErrorEval errorEval)
public EvaluationException(ErrorEval errorEval, java.lang.String message)
public static EvaluationException invalidValue()
public static EvaluationException invalidRef()
public static EvaluationException numberError()
public ErrorEval getErrorEval()
Copyright © 2005-2010 Potix Corporation. All Rights Reserved.