wydaje mi się stworzyć te dwa rodzaje metod okazyjnie:Zbieranie błędy w metodzie Java, pusty ArrayList kontra 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);
a następnie kod, który wywołuje te dołączy do listy błędzie z odpowiednim separatorem (taki jako prosty przecinek, znak nowej linii, znaczniki HTML ...), zwykle z użyciem metody Apache Commons Stringutils.join
. A w normalnym przypadku nie ma błędu, a lista będzie pusta.
Więc zacząłem zastanawiać tych dwóch pytań:
Czy widzisz problem z powrotem sznurki komunikat o błędzie, jak liście? Jeśli tak, jaka jest lepsza alternatywa? (nie wyjątki, które będą rzucane przez kod, który wywołuje te metody, kiedy jest to potrzebne.)
Czy
new LinkedList()
lubnew ArrayList(0)
lubnew ArrayList()
lepiej na liście, która jest spodziewać pozostać puste, a które normalnie powinny mieć tylko dostęp sekwencyjny do iteratora, gdy nie jest pusty?
EDIT: Przykład przypadek użycia:
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
Zazwyczaj manipulacyjny liście błędów nie mieć tych wszystkich, to po prostu stara się zilustrować punkt, w którym lista błędów jest listą komunikatów przeznaczonych dla ludzi, niezależnie od tego, jak zostaną pokazane, a także niezwiązanych z/użytecznych do obsługi d inne błędy w inny sposób.
Zachowaj prosty, użyj 'new ArrayList()'. Jeśli później pojawią się problemy, zmień je na 'nowa ArrayList (0)' lub nawet na 'new LinkedList()'. Mikro-optymalizacja jest źródłem wszelkiego zła –
@LuiggiMendoza - podoba mi się, że był w stanie użyć tego cytatu dwa razy w ciągu pięciu minut :) nice – cowls
LinkedList oczywiście, jako dopasowanie struktury danych. Zwracanie listy zamiast pozwalania na wypełnienie parametru jest bardziej czytelne. –