La classe java.util.Properties
è pensata per rappresentare una mappa in cui le chiavi e i valori sono entrambe stringhe. Questo perché gli oggetti Properties
vengono utilizzati per leggere i file .properties
, che sono file di testo.Perché java.util.Properties implementa Map <Object, Object> e non Map <String, String>
Quindi, perché in Java 5 hanno adattato questa classe per implementare Map<Object,Object>
e non Map<String,String>
?
I javadoc stati:
perché le proprietà eredita da Hashtable, la put e metodi putAll possono essere applicati a un oggetto di proprietà. Il loro uso è fortemente scoraggiato in quanto consentono al chiamante di inserire voci le cui chiavi o valori non sono stringhe. Al suo posto dovrebbe essere usato il metodo setProperty. Se il metodo store o save viene richiamato su un oggetto Properties "compromesso" che contiene una chiave o un valore non String, la chiamata avrà esito negativo.
Poiché le chiavi e i valori sono entrambi supposti essere stringhe, perché non applicarli staticamente utilizzando il tipo generico corretto?
Credo che fare Properties
attuare Map<String,String>
non sarebbe completamente compatibile con il codice scritto per la pre-Java 5. Se si dispone di codice più vecchio che si attacca non stringhe in una proprietà dell'oggetto allora che il codice non sarebbe più compilare con Java 5. Ma ... non è una buona cosa? L'intero punto dei generici non è quello di cogliere errori di questo tipo al momento della compilazione?
In realtà Map x = new Properties() funziona in entrambi i modi. La sua gente mette cose come properties.put ("flag", Boolean.TRUE); Ho visto persone mettere tutti i tipi di dati in un oggetto Proprietà, ma mai una chiave non String. ;) –
Ho aggiornato la mia risposta per renderlo più chiaro, grazie. –
Aspetta un minuto! Map