ho votato fino risposta di Brian, ma ha voluto aggiungere un po 'di più alto livello pensato ..
Se si guarda attraverso l'SDK, si scoprirà che raramente (o mai) passano attorno a oggetti di raccolta reali.
Il motivo è che non è una buona idea. Le collezioni sono estremamente protette.
La maggior parte delle volte si desidera eseguire una copia prima di passarla e passare la copia in modo che qualsiasi modifica alla raccolta non cambi l'ambiente per qualcos'altro che si basa su di essa.Inoltre, il threading diventa un incubo - anche con una collezione sincronizzata!
Ho visto due soluzioni, una è estrarre sempre un array e passarlo. Questo è come l'SDK fa.
L'altro è quello di avvolgere SEMPRE le raccolte in una classe padre (e intendo dire incapsulare, non estendere). Ho preso questa abitudine e ne vale davvero la pena. In realtà non costa nulla perché non si duplicano comunque tutti i metodi di raccolta (in realtà si duplicano raramente nessuno di essi). In effetti, ciò che si finisce per fare è spostare la funzionalità "Utility" da altre classi distribuite su tutto il codice nella classe wrapper, che è dove avrebbe dovuto essere in primo luogo.
Qualsiasi metodo con una firma che corrisponda a "metodo (raccolta, ...)" dovrebbe quasi certamente essere un metodo membro di tale raccolta, così come qualsiasi loop che itera sulla raccolta.
Devo solo buttarlo fuori ogni tanto perché è una di quelle cose che non ho avuto per un po '(perché nessuno ha sostenuto il concetto). Sembra sempre che abbia qualche inconveniente, ma avendo fatto questo per un po 'e vedendo i problemi che ha risolto e cancellato il codice, non riesco nemmeno a immaginare alcun possibile inconveniente, è tutto ok.
fonte
2009-07-13 20:44:07
Anche se 'Map' implementa' Serializable', non significa necessariamente che sia serializzabile. Ma sì, la serializzazione Java è un problema di runtime in Java. –
Sfortunatamente per Java, questa è la risposta giusta e merita di essere al top. – hythlodayr
Ti sei perso la parte importante della mia risposta ... Accetti la Mappa e POI verifica se l'oggetto è un'istanza di Serializable. Ovviamente puoi farlo al contrario, ma otterrai un'interfaccia che non dice realmente all'utente quale tipo di raccolta desideri. – Fredrik