私は時々これらの2種類のメソッドを作成するようです:
// 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);
そして、これらを呼び出すコードは、通常はApache CommonsStringutils.join
メソッドを使用して、適切な区切り文字(単純なコンマ、改行、HTMLタグなど)を使用してエラーリストに結合します。そして通常の場合、エラーはなく、リストは空になります。
それで、私はこれらの2つの質問について疑問に思い始めました:
エラーメッセージ文字列をリストとして返すことに問題がありますか?もしそうなら、より良い代替案は何ですか?(例外ではありません。必要に応じて、これらのメソッドを呼び出すコードによってスローされます。)
空のままであると予想され、通常は空でないときにシーケンシャルイテレータアクセスのみを持つ必要があるリストの
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
通常、エラーリストの処理にはこれらすべてが含まれるわけではありません。エラーリストは、表示方法に関係なく、人間が見ることを目的としたメッセージのリストであり、処理に関連しない/有用ではないという点を説明しようとしています。異なるエラー。