mi sembrano creare questi due tipi di metodi di tanto in tanto:Raccolta errori in un metodo Java, ArrayList vuoto contro 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);
E poi il codice che chiama queste si uniranno alla lista degli errori con separatore appropriato (ad esempio come semplice virgola, newline, tag HTML ...), di solito usando il metodo Apache Commons Stringutils.join
. E nel caso normale non ci sono errori, e la lista sarà vuota.
Così, ho cominciato a pensare a queste due domande:
Vedete un problema con il ritorno le stringhe dei messaggi di errore come lista? Se è così, qual è l'alternativa migliore? (non eccezioni, che sarebbero scagliati dal codice che chiama questi metodi, quando questo è voluto.)
Is
new LinkedList()
onew ArrayList(0)
onew ArrayList()
migliore per la lista che è prevede a rimanere vuota, e che dovrebbe normalmente hanno solo accesso iteratore sequenziale quando non è vuoto?
EDIT: caso d'uso Esempio:
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
Di solito la gestione della lista degli errori non avrebbero tutti coloro, si cerca solo per illustrare il punto in cui la lista degli errori è una lista di messaggi che gli umani devono vedere, indipendentemente da come verranno mostrati, e anche non relativi a/utili per la gestione d ifferent errors differently.
Mantieni semplice, usa 'new ArrayList()'. Se vedi problemi successivi, cambialo in 'new ArrayList (0)' o anche per 'new LinkedList()'. Micro ottimizzazione è la radice di tutti i mali –
@LuiggiMendoza - Mi piace il fatto che sei stato in grado di usare quella citazione due volte in cinque minuti :) nice – cowls
LinkedList ovviamente come struttura dati adeguata. Restituire una lista invece di lasciare che un parametro sia riempito, è più leggibile. –