Ho alcuni set di dati con coppie di valori-chiave, ma c'è solo un insieme limitato e conosciuto di chiavi, tutte le chiavi dovrebbero sempre essere presenti su quei dati e hanno tutti lo stesso tipo per il valore. Ha più senso usare un enum per la chiave in una mappa (come Map<SomeEnum, String>
) o creare una nuova classe per rappresentarlo? Entrambi gli approcci possono funzionare, ma mi chiedo quale sia più sensato.
Se questi dati fossero in JSON, potrebbero avere un aspetto simile a questo.
{
"alpha": "blah",
"bravo": "blah blah",
"charlie": "blah blah blah"
}
Il mio istinto è che l'approccio di classe è migliore. Il mio ragionamento è che usare Map
è più per quando si hanno chiavi o chiavi arbitrarie che saranno sconosciute in fase di compilazione. Uno dei vantaggi di una classe con getter è che tutte le chiavi possibili sono proprio lì, sono essenzialmente metodi. Rende il codice più "auto documentante" in un certo senso. L'unico vero svantaggio di questo approccio è che c'è più spazio per scrivere (che può essere alleviato con cose come gli strumenti di generazione di sorgenti IDE).
Il codice per l'approccio di classe sarebbe qualcosa di simile.
class Data {
private final String alpha;
private final String bravo;
private final String charlie;
// Constructor and getters omitted for brevity
}
Il codice per l'approccio della mappa sarebbe simile a questo.
enum Key {
ALPHA, BRAVO, CHARLIE
}
//...
Map<Key, String> data;