Re: values for fields in failure/exception
On 9 d=E9c, 18:28, mark jason <markjaso...@gmail.com> wrote:
hi,
In my program I need to return a result object as below
class MyResult {
private boolean success;
private double distance;
private String matchFileName;
private String message;
public MyResult (boolean s, double d, String mfn, String msg) {
this.success = s;
this.distance = d;
this.matchFileName = mfn;
this.message = msg;
}
//getters and setters...
}
In my program , I am returning a MyResult instance containing values
from a calculation.If an exception occurs ,I would like to return the
object with values which represent a failed calculation .The problem
is that,I cannot put distance as 0.0 since it is one of the valid
distance values.
So I put distance as Double.NaN.I don't know if this is the correct
way..Can someone suggest a better solution?
Every public class and public method defines a contract, that clients
must respect. If you define the contract clearly, by documenting it,
clients just have to obey the contract and everything will be fine.
Here's an exemple of such a contract.
/**
* The result of the computation, which can be successful or not. The
result
* contains a distance, a message and the file name of the match. The
distance
* only makes sense in the case of a successful result.
*/
public class MyResult {
private boolean success;
private double distance;
private String matchFileName;
private String message;
public MyResult (boolean s, double d, String mfn, String msg) {
this.success = s;
this.distance = d;
this.matchFileName = mfn;
this.message = msg;
}
/**
* Gets the distance from the result. Note that the returned
distance is
* undetermined if the result is not successful.
* @see #isSuccess() to know if the result is successful and if
calling this method
* makes sense
*/
public double getDistance() {
return this.distance;
}
/**
* Determines is the result is successful or not. Clients should
call this method
* and ensure the result is successful before getting the distance
from the result.
* @return <code>true</code> if the result is successful,
<code>false</code>otherwise.
*/
public boolean isSuccess() {
return this.success;
}
// ...
}
JB.
public MyResult getResult() {
MyResult res = null;
try{
res = calculate();
}catch(SomeException e) {
return new MyResult ( false, Double.NaN, "", e.getMessage=
() );
}
return res;
}
regards,
mark