我似乎创造这两种方法偶尔:在Java方法收集错误,空的ArrayList与LinkedList的
// return null on errors, and append errors to 2nd param, otherwise return result
String fetchSomething(String parameter, List<String> errorMessagesOut);
// return empty list or null on no errors, otherwise list of errors
List<String> verifySomething(String parameter);
然后该代码调用这些将加入适当的分离器的错误列表(例如如简单的逗号,换行符,HTML标签...),通常使用Apache Commons Stringutils.join
方法。在正常情况下,没有错误,列表将为空。
于是,我开始想知道这两个问题:
你看到返回的错误信息字符串作为列表中的问题?如果是这样,有什么更好的选择? (不例外,这将通过调用这些方法,我们只是想在代码中抛出。)
是
new LinkedList()
或new ArrayList(0)
或new ArrayList()
的列表,它是预期保持空越好,通常应该只有序列迭代器访问时它不是空的?
编辑:示例用例:
List<String> verifyParameters(JSONObject params) {
List<String> ret = new ArrayList<String>(0);
if (!verifyKey(params.get("key")))
ret.add("Invalid key: " + key);
if (!verifyAccess(params.get("user"), params.get("pass")))
ret.add("Authentication error");
return ret;
}
...
List<String> errors = verifyParameters(params);
if (!errors.isEmpty()) {
connection.sendErrorListMessage(errors);
logger.warn(StringUtils.join(errors, ", "));
controlPanel.show("Errors: \n- " + StringUtils.join(errors, "\n- ") + '\n');
throw new AbortException("invalid params); // or maybe return false/null;
}
// proceed with valid params
通常处理错误列表不会有所有这些,它只是试图说明错误列表是指供人类看到的消息列表,与它将如何显示无关,也与处理d无关/有用不同的错误不同。
保持简单,使用'new ArrayList()'。如果以后看到问题,请将其更改为“新的ArrayList(0)”或甚至是“新的LinkedList()”。微型优化是所有邪恶的根源 – 2013-03-04 16:30:36
@LuiggiMendoza - 我喜欢你能够在五分钟内使用这个报价两次:) nice – cowls 2013-03-04 16:31:58
LinkedList当然,作为拟合的数据结构。返回一个列表而不是让一个参数被填充,更具可读性。 – 2013-03-04 16:39:11