[英]Determine method success when the return value is not a boolean
在编程时我尝试将我的代码模块化为尽可能小的聚焦方法,有时这会成为一个问题,因为如果我在一些I / O循环中并且某些方法无法获取所请求的数据,那么我不能只控制流程如果我有一个很大的方法,就像我可以轻松获得返回值。
大多数方法通过返回一个表示成功的布尔值来解决这个问题,但我的问题是,当返回一个重要对象的方法成功/失败时,最佳做法是什么?
考虑以下java代码:
public JSONObject toJSONObjectForServer() {
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put(KEY_TASKTYPE, _taskType);
jsonObject.put(KEY_TIMESTAMP, _timestamp);
jsonObject.put(KEY_TASKSCORE, _taskScore);
jsonObject.put(KEY_UNITSCONSUMED, _unitsConsumed);
} catch (JSONException e) {
e.printStackTrace();
}
return jsonObject;
}
如果由于某种原因失败,将返回空的JSONObject。 将错误检测推迟到调用方法,使我必须编写丑陋的东西,如:
JSONObject result = x.toJSONObjectForServer();
if (result.has(KEY_TASKTYPE))
// method success
else // method failure
以这种方式处理结果并不是不言自明的。 我可以为每个返回类型定义一个新类:
public class JSONObjectForServerResult {
private JSONObject _object;
private boolean _result;
public JSONObject getObject { return _object; }
public boolean getResult { return _result; }
// ctor
}
然后让调用者像这样:
// some method
JSONObjectForServerResult forServerResult = x.toJSONObjectForServer();
if (forServerResult.getResult())
// method success
else // method failure
但这似乎令人费解并且做了很多工作。
在以这种方式控制流量/错误处理时,我是否缺少某些东西?
谢谢!
我不明白为什么你首先要抓住这个例外。 你能不抛出JSONException并让调用者处理错误?
正如另一个答案建议的那样,您可以简单地使用异常处理来指示何时出错并且没有结果。 事实上,这是为什么设计了例外。
但是,在某些语言中,包括Java 8,有一种机制类似于你提出的“每个返回类型的新类”,但是通常都是这样做的,所以你不必自己编写代码就可以了。每种类型都需要一个新的。
在Haskell中,这是Maybe monad 。 在Scala中它是Option ,在Java 8中,它是Optional 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.